@researchdatabox/redbox-core 0.0.0-bootstrap.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/dist/Attachment.d.ts +17 -0
- package/dist/Attachment.d.ts.map +1 -0
- package/dist/Attachment.js +40 -0
- package/dist/CoreController.d.ts +202 -0
- package/dist/CoreController.d.ts.map +1 -0
- package/dist/CoreController.js +688 -0
- package/dist/CoreService.d.ts +95 -0
- package/dist/CoreService.d.ts.map +1 -0
- package/dist/CoreService.js +295 -0
- package/dist/Datastream.d.ts +11 -0
- package/dist/Datastream.d.ts.map +1 -0
- package/dist/Datastream.js +38 -0
- package/dist/DatastreamService.d.ts +19 -0
- package/dist/DatastreamService.d.ts.map +1 -0
- package/dist/DatastreamService.js +3 -0
- package/dist/DatastreamServiceResponse.d.ts +12 -0
- package/dist/DatastreamServiceResponse.d.ts.map +1 -0
- package/dist/DatastreamServiceResponse.js +37 -0
- package/dist/IntegrationAuditParams.d.ts.map +1 -0
- package/dist/Logger.d.ts +16 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +3 -0
- package/dist/QueueService.d.ts +9 -0
- package/dist/QueueService.d.ts.map +1 -0
- package/dist/QueueService.js +21 -0
- package/dist/RecordAuditParams.d.ts +6 -0
- package/dist/RecordAuditParams.d.ts.map +1 -0
- package/dist/RecordAuditParams.js +10 -0
- package/dist/RecordsService.d.ts +39 -0
- package/dist/RecordsService.d.ts.map +1 -0
- package/dist/RecordsService.js +3 -0
- package/dist/SearchService.d.ts +8 -0
- package/dist/SearchService.d.ts.map +1 -0
- package/dist/SearchService.js +3 -0
- package/dist/StorageService.d.ts +27 -0
- package/dist/StorageService.d.ts.map +1 -0
- package/dist/StorageService.js +3 -0
- package/dist/StorageServiceResponse.d.ts +16 -0
- package/dist/StorageServiceResponse.d.ts.map +1 -0
- package/dist/StorageServiceResponse.js +41 -0
- package/dist/bootstrap.d.ts +32 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +172 -0
- package/dist/config/action.config.d.ts +13 -0
- package/dist/config/action.config.d.ts.map +1 -0
- package/dist/config/action.config.js +9 -0
- package/dist/config/agendaQueue.config.d.ts +49 -0
- package/dist/config/agendaQueue.config.d.ts.map +1 -0
- package/dist/config/agendaQueue.config.js +71 -0
- package/dist/config/api.config.d.ts +9 -0
- package/dist/config/api.config.d.ts.map +1 -0
- package/dist/config/api.config.js +11 -0
- package/dist/config/appmode.config.d.ts +12 -0
- package/dist/config/appmode.config.d.ts.map +1 -0
- package/dist/config/appmode.config.js +12 -0
- package/dist/config/auth.config.d.ts +15 -0
- package/dist/config/auth.config.d.ts.map +1 -0
- package/dist/config/auth.config.js +81 -0
- package/dist/config/autoreload.config.d.ts +18 -0
- package/dist/config/autoreload.config.d.ts.map +1 -0
- package/dist/config/autoreload.config.js +21 -0
- package/dist/config/blueprints.config.d.ts +28 -0
- package/dist/config/blueprints.config.d.ts.map +1 -0
- package/dist/config/blueprints.config.js +15 -0
- package/dist/config/bootstrap.config.d.ts +15 -0
- package/dist/config/bootstrap.config.d.ts.map +1 -0
- package/dist/config/bootstrap.config.js +12 -0
- package/dist/config/branding.config.d.ts +19 -0
- package/dist/config/branding.config.d.ts.map +1 -0
- package/dist/config/branding.config.js +109 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts +134 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -0
- package/dist/config/brandingConfigurationDefaults.config.js +283 -0
- package/dist/config/companion.config.d.ts +41 -0
- package/dist/config/companion.config.d.ts.map +1 -0
- package/dist/config/companion.config.js +61 -0
- package/dist/config/cors.config.d.ts +22 -0
- package/dist/config/cors.config.d.ts.map +1 -0
- package/dist/config/cors.config.js +11 -0
- package/dist/config/crontab.config.d.ts +22 -0
- package/dist/config/crontab.config.d.ts.map +1 -0
- package/dist/config/crontab.config.js +18 -0
- package/dist/config/csp.config.d.ts +53 -0
- package/dist/config/csp.config.d.ts.map +1 -0
- package/dist/config/csp.config.js +32 -0
- package/dist/config/custom.config.d.ts +16 -0
- package/dist/config/custom.config.d.ts.map +1 -0
- package/dist/config/custom.config.js +22 -0
- package/dist/config/custom_cache.config.d.ts +14 -0
- package/dist/config/custom_cache.config.d.ts.map +1 -0
- package/dist/config/custom_cache.config.js +13 -0
- package/dist/config/dashboardtype.config.d.ts +45 -0
- package/dist/config/dashboardtype.config.d.ts.map +1 -0
- package/dist/config/dashboardtype.config.js +98 -0
- package/dist/config/datacite.config.d.ts +51 -0
- package/dist/config/datacite.config.d.ts.map +1 -0
- package/dist/config/datacite.config.js +44 -0
- package/dist/config/datapubs.config.d.ts +72 -0
- package/dist/config/datapubs.config.d.ts.map +1 -0
- package/dist/config/datapubs.config.js +74 -0
- package/dist/config/datastores.config.d.ts +20 -0
- package/dist/config/datastores.config.d.ts.map +1 -0
- package/dist/config/datastores.config.js +21 -0
- package/dist/config/dompurify.config.d.ts +65 -0
- package/dist/config/dompurify.config.d.ts.map +1 -0
- package/dist/config/dompurify.config.js +181 -0
- package/dist/config/dynamicasset.config.d.ts +13 -0
- package/dist/config/dynamicasset.config.d.ts.map +1 -0
- package/dist/config/dynamicasset.config.js +18 -0
- package/dist/config/dynamicconfig.config.d.ts +12 -0
- package/dist/config/dynamicconfig.config.d.ts.map +1 -0
- package/dist/config/dynamicconfig.config.js +13 -0
- package/dist/config/emailnotification.config.d.ts +49 -0
- package/dist/config/emailnotification.config.d.ts.map +1 -0
- package/dist/config/emailnotification.config.js +37 -0
- package/dist/config/figshareAPI.config.d.ts +116 -0
- package/dist/config/figshareAPI.config.d.ts.map +1 -0
- package/dist/config/figshareAPI.config.js +857 -0
- package/dist/config/figshareAPIEnv.config.d.ts +11 -0
- package/dist/config/figshareAPIEnv.config.d.ts.map +1 -0
- package/dist/config/figshareAPIEnv.config.js +13 -0
- package/dist/config/figshareDev.config.d.ts.map +1 -0
- package/dist/config/figshareRedboxFORMapping.config.d.ts +15 -0
- package/dist/config/figshareRedboxFORMapping.config.d.ts.map +1 -0
- package/dist/config/figshareRedboxFORMapping.config.js +7458 -0
- package/dist/config/form.config.d.ts +20 -0
- package/dist/config/form.config.d.ts.map +1 -0
- package/dist/config/form.config.js +11 -0
- package/dist/config/globals.config.d.ts +20 -0
- package/dist/config/globals.config.d.ts.map +1 -0
- package/dist/config/globals.config.js +52 -0
- package/dist/config/http.config.d.ts +57 -0
- package/dist/config/http.config.d.ts.map +1 -0
- package/dist/config/http.config.js +462 -0
- package/dist/config/i18n.config.d.ts +38 -0
- package/dist/config/i18n.config.d.ts.map +1 -0
- package/dist/config/i18n.config.js +30 -0
- package/dist/config/index.d.ts +306 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +240 -0
- package/dist/config/jsonld.config.d.ts +19 -0
- package/dist/config/jsonld.config.d.ts.map +1 -0
- package/dist/config/jsonld.config.js +33 -0
- package/dist/config/log.config.d.ts +20 -0
- package/dist/config/log.config.d.ts.map +1 -0
- package/dist/config/log.config.js +157 -0
- package/dist/config/lognamespace.config.d.ts +13 -0
- package/dist/config/lognamespace.config.d.ts.map +1 -0
- package/dist/config/lognamespace.config.js +17 -0
- package/dist/config/mint.config.d.ts +23 -0
- package/dist/config/mint.config.d.ts.map +1 -0
- package/dist/config/mint.config.js +20 -0
- package/dist/config/models.config.d.ts +37 -0
- package/dist/config/models.config.d.ts.map +1 -0
- package/dist/config/models.config.js +23 -0
- package/dist/config/namedQuery.config.d.ts +26 -0
- package/dist/config/namedQuery.config.d.ts.map +1 -0
- package/dist/config/namedQuery.config.js +358 -0
- package/dist/config/ng2.config.d.ts +11 -0
- package/dist/config/ng2.config.d.ts.map +1 -0
- package/dist/config/ng2.config.js +12 -0
- package/dist/config/orcid.config.d.ts +12 -0
- package/dist/config/orcid.config.d.ts.map +1 -0
- package/dist/config/orcid.config.js +13 -0
- package/dist/config/orm.config.d.ts +12 -0
- package/dist/config/orm.config.d.ts.map +1 -0
- package/dist/config/orm.config.js +13 -0
- package/dist/config/peopleSearch.config.d.ts +14 -0
- package/dist/config/peopleSearch.config.d.ts.map +1 -0
- package/dist/config/peopleSearch.config.js +15 -0
- package/dist/config/policies.config.d.ts +18 -0
- package/dist/config/policies.config.d.ts.map +1 -0
- package/dist/config/policies.config.js +65 -0
- package/dist/config/queue.config.d.ts +12 -0
- package/dist/config/queue.config.d.ts.map +1 -0
- package/dist/config/queue.config.js +13 -0
- package/dist/config/raid.config.d.ts +66 -0
- package/dist/config/raid.config.d.ts.map +1 -0
- package/dist/config/raid.config.js +272 -0
- package/dist/config/record.config.d.ts +74 -0
- package/dist/config/record.config.d.ts.map +1 -0
- package/dist/config/record.config.js +104 -0
- package/dist/config/recordtype.config.d.ts +66 -0
- package/dist/config/recordtype.config.d.ts.map +1 -0
- package/dist/config/recordtype.config.js +660 -0
- package/dist/config/redboxSession.config.d.ts +29 -0
- package/dist/config/redboxSession.config.d.ts.map +1 -0
- package/dist/config/redboxSession.config.js +14 -0
- package/dist/config/redboxToCkan.config.d.ts +17 -0
- package/dist/config/redboxToCkan.config.d.ts.map +1 -0
- package/dist/config/redboxToCkan.config.js +18 -0
- package/dist/config/relatedObjectsFormDefinition.config.d.ts.map +1 -0
- package/dist/config/report.config.d.ts +46 -0
- package/dist/config/report.config.d.ts.map +1 -0
- package/dist/config/report.config.js +54 -0
- package/dist/config/reusableContributorFormDefinitions.config.d.ts +3 -0
- package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -0
- package/dist/config/reusableContributorFormDefinitions.config.js +408 -0
- package/dist/config/reusableFormDefinitions.config.d.ts +16 -0
- package/dist/config/reusableFormDefinitions.config.d.ts.map +1 -0
- package/dist/config/reusableFormDefinitions.config.js +41 -0
- package/dist/config/reusableRelatedObjectsFormDefinitions.config.d.ts +22 -0
- package/dist/config/reusableRelatedObjectsFormDefinitions.config.d.ts.map +1 -0
- package/dist/config/reusableRelatedObjectsFormDefinitions.config.js +291 -0
- package/dist/config/reusableViewFormDefinitions.config.d.ts +3 -0
- package/dist/config/reusableViewFormDefinitions.config.d.ts.map +1 -0
- package/dist/config/reusableViewFormDefinitions.config.js +140 -0
- package/dist/config/routes.config.d.ts +21 -0
- package/dist/config/routes.config.d.ts.map +1 -0
- package/dist/config/routes.config.js +389 -0
- package/dist/config/search.config.d.ts +9 -0
- package/dist/config/search.config.d.ts.map +1 -0
- package/dist/config/search.config.js +11 -0
- package/dist/config/security.config.d.ts +22 -0
- package/dist/config/security.config.d.ts.map +1 -0
- package/dist/config/security.config.js +14 -0
- package/dist/config/session.config.d.ts +37 -0
- package/dist/config/session.config.d.ts.map +1 -0
- package/dist/config/session.config.js +11 -0
- package/dist/config/sockets.config.d.ts +17 -0
- package/dist/config/sockets.config.d.ts.map +1 -0
- package/dist/config/sockets.config.js +12 -0
- package/dist/config/solr.config.d.ts +73 -0
- package/dist/config/solr.config.d.ts.map +1 -0
- package/dist/config/solr.config.js +79 -0
- package/dist/config/static_assets.config.d.ts +10 -0
- package/dist/config/static_assets.config.d.ts.map +1 -0
- package/dist/config/static_assets.config.js +12 -0
- package/dist/config/storage.config.d.ts +42 -0
- package/dist/config/storage.config.d.ts.map +1 -0
- package/dist/config/storage.config.js +30 -0
- package/dist/config/typescript.config.d.ts +12 -0
- package/dist/config/typescript.config.d.ts.map +1 -0
- package/dist/config/typescript.config.js +13 -0
- package/dist/config/validators.config.d.ts +13 -0
- package/dist/config/validators.config.d.ts.map +1 -0
- package/dist/config/validators.config.js +15 -0
- package/dist/config/views.config.d.ts +20 -0
- package/dist/config/views.config.d.ts.map +1 -0
- package/dist/config/views.config.js +20 -0
- package/dist/config/vocab.config.d.ts +58 -0
- package/dist/config/vocab.config.d.ts.map +1 -0
- package/dist/config/vocab.config.js +58 -0
- package/dist/config/webpack.config.d.ts +16 -0
- package/dist/config/webpack.config.d.ts.map +1 -0
- package/dist/config/webpack.config.js +153 -0
- package/dist/config/workflow.config.d.ts +76 -0
- package/dist/config/workflow.config.d.ts.map +1 -0
- package/dist/config/workflow.config.js +339 -0
- package/dist/config/workspacetype.config.d.ts +23 -0
- package/dist/config/workspacetype.config.d.ts.map +1 -0
- package/dist/config/workspacetype.config.js +19 -0
- package/dist/configmodels/AdminSidebarConfig.d.ts +352 -0
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -0
- package/dist/configmodels/AdminSidebarConfig.js +163 -0
- package/dist/configmodels/AppConfig.interface.d.ts +4 -0
- package/dist/configmodels/AppConfig.interface.d.ts.map +1 -0
- package/dist/configmodels/AppConfig.interface.js +10 -0
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts +43 -0
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -0
- package/dist/configmodels/AuthorizedDomainsEmails.js +49 -0
- package/dist/configmodels/ConfigModels.d.ts +22 -0
- package/dist/configmodels/ConfigModels.d.ts.map +1 -0
- package/dist/configmodels/ConfigModels.js +98 -0
- package/dist/configmodels/DoiPublishing.d.ts.map +1 -0
- package/dist/configmodels/FigsharePublishing.d.ts.map +1 -0
- package/dist/configmodels/HomePanelConfig.d.ts +244 -0
- package/dist/configmodels/HomePanelConfig.d.ts.map +1 -0
- package/dist/configmodels/HomePanelConfig.js +132 -0
- package/dist/configmodels/MenuConfig.d.ts +203 -0
- package/dist/configmodels/MenuConfig.d.ts.map +1 -0
- package/dist/configmodels/MenuConfig.js +158 -0
- package/dist/configmodels/SystemMessage.d.ts +24 -0
- package/dist/configmodels/SystemMessage.d.ts.map +1 -0
- package/dist/configmodels/SystemMessage.js +30 -0
- package/dist/controllers/ActionController.d.ts +21 -0
- package/dist/controllers/ActionController.d.ts.map +1 -0
- package/dist/controllers/ActionController.js +41 -0
- package/dist/controllers/AdminController.d.ts +45 -0
- package/dist/controllers/AdminController.d.ts.map +1 -0
- package/dist/controllers/AdminController.js +498 -0
- package/dist/controllers/AppConfigController.d.ts +25 -0
- package/dist/controllers/AppConfigController.d.ts.map +1 -0
- package/dist/controllers/AppConfigController.js +90 -0
- package/dist/controllers/AsynchController.d.ts +30 -0
- package/dist/controllers/AsynchController.d.ts.map +1 -0
- package/dist/controllers/AsynchController.js +146 -0
- package/dist/controllers/BrandingAppController.d.ts +21 -0
- package/dist/controllers/BrandingAppController.d.ts.map +1 -0
- package/dist/controllers/BrandingAppController.js +144 -0
- package/dist/controllers/BrandingController.d.ts +64 -0
- package/dist/controllers/BrandingController.d.ts.map +1 -0
- package/dist/controllers/BrandingController.js +256 -0
- package/dist/controllers/DynamicAssetController.d.ts +67 -0
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -0
- package/dist/controllers/DynamicAssetController.js +225 -0
- package/dist/controllers/EmailController.d.ts +35 -0
- package/dist/controllers/EmailController.d.ts.map +1 -0
- package/dist/controllers/EmailController.js +138 -0
- package/dist/controllers/ExportController.d.ts +22 -0
- package/dist/controllers/ExportController.d.ts.map +1 -0
- package/dist/controllers/ExportController.js +73 -0
- package/dist/controllers/FormVocabularyController.d.ts +12 -0
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -0
- package/dist/controllers/FormVocabularyController.js +218 -0
- package/dist/controllers/RecordAuditController.d.ts +25 -0
- package/dist/controllers/RecordAuditController.d.ts.map +1 -0
- package/dist/controllers/RecordAuditController.js +74 -0
- package/dist/controllers/RecordController.d.ts +114 -0
- package/dist/controllers/RecordController.d.ts.map +1 -0
- package/dist/controllers/RecordController.js +1614 -0
- package/dist/controllers/RenderViewController.d.ts +14 -0
- package/dist/controllers/RenderViewController.d.ts.map +1 -0
- package/dist/controllers/RenderViewController.js +30 -0
- package/dist/controllers/ReportController.d.ts +25 -0
- package/dist/controllers/ReportController.d.ts.map +1 -0
- package/dist/controllers/ReportController.js +80 -0
- package/dist/controllers/ReportsController.d.ts +22 -0
- package/dist/controllers/ReportsController.d.ts.map +1 -0
- package/dist/controllers/ReportsController.js +37 -0
- package/dist/controllers/TranslationController.d.ts +27 -0
- package/dist/controllers/TranslationController.d.ts.map +1 -0
- package/dist/controllers/TranslationController.js +245 -0
- package/dist/controllers/UserController.d.ts +50 -0
- package/dist/controllers/UserController.d.ts.map +1 -0
- package/dist/controllers/UserController.js +518 -0
- package/dist/controllers/VocabController.d.ts +43 -0
- package/dist/controllers/VocabController.d.ts.map +1 -0
- package/dist/controllers/VocabController.js +190 -0
- package/dist/controllers/VocabularyController.d.ts +23 -0
- package/dist/controllers/VocabularyController.d.ts.map +1 -0
- package/dist/controllers/VocabularyController.js +344 -0
- package/dist/controllers/WorkspaceAsyncController.d.ts +18 -0
- package/dist/controllers/WorkspaceAsyncController.d.ts.map +1 -0
- package/dist/controllers/WorkspaceAsyncController.js +63 -0
- package/dist/controllers/WorkspaceTypesController.d.ts +19 -0
- package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -0
- package/dist/controllers/WorkspaceTypesController.js +96 -0
- package/dist/controllers/index.d.ts +8 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/index.js +159 -0
- package/dist/controllers/webservice/AdminController.d.ts +20 -0
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -0
- package/dist/controllers/webservice/AdminController.js +83 -0
- package/dist/controllers/webservice/AppConfigController.d.ts +25 -0
- package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -0
- package/dist/controllers/webservice/AppConfigController.js +72 -0
- package/dist/controllers/webservice/BrandingController.d.ts +13 -0
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -0
- package/dist/controllers/webservice/BrandingController.js +147 -0
- package/dist/controllers/webservice/ExportController.d.ts +22 -0
- package/dist/controllers/webservice/ExportController.d.ts.map +1 -0
- package/dist/controllers/webservice/ExportController.js +67 -0
- package/dist/controllers/webservice/FormManagementController.d.ts +24 -0
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -0
- package/dist/controllers/webservice/FormManagementController.js +79 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -0
- package/dist/controllers/webservice/RecordController.d.ts +65 -0
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -0
- package/dist/controllers/webservice/RecordController.js +1348 -0
- package/dist/controllers/webservice/RecordTypeController.d.ts +24 -0
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -0
- package/dist/controllers/webservice/RecordTypeController.js +70 -0
- package/dist/controllers/webservice/ReportController.d.ts +22 -0
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -0
- package/dist/controllers/webservice/ReportController.js +74 -0
- package/dist/controllers/webservice/SearchController.d.ts +28 -0
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -0
- package/dist/controllers/webservice/SearchController.js +123 -0
- package/dist/controllers/webservice/TranslationController.d.ts +18 -0
- package/dist/controllers/webservice/TranslationController.d.ts.map +1 -0
- package/dist/controllers/webservice/TranslationController.js +226 -0
- package/dist/controllers/webservice/UserManagementController.d.ts +38 -0
- package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -0
- package/dist/controllers/webservice/UserManagementController.js +608 -0
- package/dist/controllers/webservice/VocabularyController.d.ts +18 -0
- package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -0
- package/dist/controllers/webservice/VocabularyController.js +172 -0
- package/dist/decorator/PopulateExportedMethods.decorator.d.ts +4 -0
- package/dist/decorator/PopulateExportedMethods.decorator.d.ts.map +1 -0
- package/dist/decorator/PopulateExportedMethods.decorator.js +22 -0
- package/dist/decorator/index.d.ts +2 -0
- package/dist/decorator/index.d.ts.map +1 -0
- package/dist/decorator/index.js +6 -0
- package/dist/decorators/Associations.d.ts +4 -0
- package/dist/decorators/Associations.d.ts.map +1 -0
- package/dist/decorators/Associations.js +12 -0
- package/dist/decorators/Attr.d.ts +4 -0
- package/dist/decorators/Attr.d.ts.map +1 -0
- package/dist/decorators/Attr.js +34 -0
- package/dist/decorators/Entity.d.ts +3 -0
- package/dist/decorators/Entity.d.ts.map +1 -0
- package/dist/decorators/Entity.js +29 -0
- package/dist/decorators/Lifecycle.d.ts +10 -0
- package/dist/decorators/Lifecycle.d.ts.map +1 -0
- package/dist/decorators/Lifecycle.js +26 -0
- package/dist/decorators/index.d.ts +8 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +35 -0
- package/dist/decorators/registry.d.ts +8 -0
- package/dist/decorators/registry.d.ts.map +1 -0
- package/dist/decorators/registry.js +68 -0
- package/dist/decorators/types.d.ts +81 -0
- package/dist/decorators/types.d.ts.map +1 -0
- package/dist/decorators/types.js +4 -0
- package/dist/decorators/utils.d.ts +5 -0
- package/dist/decorators/utils.d.ts.map +1 -0
- package/dist/decorators/utils.js +68 -0
- package/dist/form-config/dataPublication-1.0-draft.d.ts.map +1 -0
- package/dist/form-config/dataPublication-1.0-embargoed.d.ts.map +1 -0
- package/dist/form-config/dataPublication-1.0-published.d.ts.map +1 -0
- package/dist/form-config/dataPublication-1.0-queued.d.ts.map +1 -0
- package/dist/form-config/dataPublication-1.0-retired.d.ts.map +1 -0
- package/dist/form-config/dataRecord-1.0-draft.d.ts +4 -0
- package/dist/form-config/dataRecord-1.0-draft.d.ts.map +1 -0
- package/dist/form-config/dataRecord-1.0-draft.js +1042 -0
- package/dist/form-config/default-1.0-draft.d.ts +4 -0
- package/dist/form-config/default-1.0-draft.d.ts.map +1 -0
- package/dist/form-config/default-1.0-draft.js +1132 -0
- package/dist/form-config/generated-view-only.d.ts +12 -0
- package/dist/form-config/generated-view-only.d.ts.map +1 -0
- package/dist/form-config/generated-view-only.js +169 -0
- package/dist/form-config/index.d.ts +3 -0
- package/dist/form-config/index.d.ts.map +1 -0
- package/dist/form-config/index.js +15 -0
- package/dist/hooks/defineRedboxHook.d.ts +31 -0
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -0
- package/dist/hooks/defineRedboxHook.js +47 -0
- package/dist/hooks/index.d.ts +9 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +13 -0
- package/dist/hooks/webpack.d.ts +27 -0
- package/dist/hooks/webpack.d.ts.map +1 -0
- package/dist/hooks/webpack.js +82 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/loader/bootstrapShimRuntime.d.ts +8 -0
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -0
- package/dist/loader/bootstrapShimRuntime.js +83 -0
- package/dist/loader/index.d.ts +93 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +767 -0
- package/dist/middleware/redboxSession.d.ts +6 -0
- package/dist/middleware/redboxSession.d.ts.map +1 -0
- package/dist/middleware/redboxSession.js +60 -0
- package/dist/model/APIActionResponse.d.ts +6 -0
- package/dist/model/APIActionResponse.d.ts.map +1 -0
- package/dist/model/APIActionResponse.js +13 -0
- package/dist/model/APIErrorResponse.d.ts +6 -0
- package/dist/model/APIErrorResponse.d.ts.map +1 -0
- package/dist/model/APIErrorResponse.js +13 -0
- package/dist/model/APIHarvestResponse.d.ts +9 -0
- package/dist/model/APIHarvestResponse.d.ts.map +1 -0
- package/dist/model/APIHarvestResponse.js +19 -0
- package/dist/model/APIObjectActionResponse.d.ts +7 -0
- package/dist/model/APIObjectActionResponse.d.ts.map +1 -0
- package/dist/model/APIObjectActionResponse.js +15 -0
- package/dist/model/BuildResponse.d.ts +47 -0
- package/dist/model/BuildResponse.d.ts.map +1 -0
- package/dist/model/BuildResponse.js +5 -0
- package/dist/model/DashboardTypeResponseModel.d.ts +6 -0
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -0
- package/dist/model/DashboardTypeResponseModel.js +13 -0
- package/dist/model/ListAPIResponse.d.ts +7 -0
- package/dist/model/ListAPIResponse.d.ts.map +1 -0
- package/dist/model/ListAPIResponse.js +12 -0
- package/dist/model/ListAPISummary.d.ts +7 -0
- package/dist/model/ListAPISummary.d.ts.map +1 -0
- package/dist/model/ListAPISummary.js +12 -0
- package/dist/model/RBValidationError.d.ts +62 -0
- package/dist/model/RBValidationError.d.ts.map +1 -0
- package/dist/model/RBValidationError.js +98 -0
- package/dist/model/RecordTypeResponseModel.d.ts +10 -0
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -0
- package/dist/model/RecordTypeResponseModel.js +19 -0
- package/dist/model/RequestDetails.d.ts +27 -0
- package/dist/model/RequestDetails.d.ts.map +1 -0
- package/dist/model/RequestDetails.js +53 -0
- package/dist/model/SolrDocument.d.ts +17 -0
- package/dist/model/SolrDocument.d.ts.map +1 -0
- package/dist/model/SolrDocument.js +30 -0
- package/dist/model/api/APIResponseVersion2.d.ts +107 -0
- package/dist/model/api/APIResponseVersion2.d.ts.map +1 -0
- package/dist/model/api/APIResponseVersion2.js +3 -0
- package/dist/model/api/APIVersions.d.ts +9 -0
- package/dist/model/api/APIVersions.d.ts.map +1 -0
- package/dist/model/api/APIVersions.js +11 -0
- package/dist/model/api/CreateUserAPIResponse.d.ts +9 -0
- package/dist/model/api/CreateUserAPIResponse.d.ts.map +1 -0
- package/dist/model/api/CreateUserAPIResponse.js +13 -0
- package/dist/model/api/FigshareArticleCreate.d.ts +11 -0
- package/dist/model/api/FigshareArticleCreate.d.ts.map +1 -0
- package/dist/model/api/FigshareArticleCreate.js +16 -0
- package/dist/model/api/FigshareArticleEmbargo.d.ts +11 -0
- package/dist/model/api/FigshareArticleEmbargo.d.ts.map +1 -0
- package/dist/model/api/FigshareArticleEmbargo.js +23 -0
- package/dist/model/api/FigshareArticleUpdate.d.ts +13 -0
- package/dist/model/api/FigshareArticleUpdate.d.ts.map +1 -0
- package/dist/model/api/FigshareArticleUpdate.js +20 -0
- package/dist/model/api/UserAPITokenAPIResponse.d.ts +6 -0
- package/dist/model/api/UserAPITokenAPIResponse.d.ts.map +1 -0
- package/dist/model/api/UserAPITokenAPIResponse.js +10 -0
- package/dist/model/api/index.d.ts +8 -0
- package/dist/model/api/index.d.ts.map +1 -0
- package/dist/model/api/index.js +16 -0
- package/dist/model/config/ReportConfig.d.ts +50 -0
- package/dist/model/config/ReportConfig.d.ts.map +1 -0
- package/dist/model/config/ReportConfig.js +58 -0
- package/dist/model/config/SolrConfig.d.ts +72 -0
- package/dist/model/config/SolrConfig.d.ts.map +1 -0
- package/dist/model/config/SolrConfig.js +41 -0
- package/dist/model/config/VocabQueryConfig.d.ts +30 -0
- package/dist/model/config/VocabQueryConfig.d.ts.map +1 -0
- package/dist/model/config/VocabQueryConfig.js +32 -0
- package/dist/model/config/index.d.ts +4 -0
- package/dist/model/config/index.d.ts.map +1 -0
- package/dist/model/config/index.js +20 -0
- package/dist/model/index.d.ts +16 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +45 -0
- package/dist/model/storage/AppConfigModel.d.ts +9 -0
- package/dist/model/storage/AppConfigModel.d.ts.map +1 -0
- package/dist/model/storage/AppConfigModel.js +3 -0
- package/dist/model/storage/AsynchProgressModel.d.ts +18 -0
- package/dist/model/storage/AsynchProgressModel.d.ts.map +1 -0
- package/dist/model/storage/AsynchProgressModel.js +3 -0
- package/dist/model/storage/BrandingModel.d.ts +24 -0
- package/dist/model/storage/BrandingModel.d.ts.map +1 -0
- package/dist/model/storage/BrandingModel.js +60 -0
- package/dist/model/storage/CacheEntryModel.d.ts +6 -0
- package/dist/model/storage/CacheEntryModel.d.ts.map +1 -0
- package/dist/model/storage/CacheEntryModel.js +3 -0
- package/dist/model/storage/CounterModel.d.ts +7 -0
- package/dist/model/storage/CounterModel.d.ts.map +1 -0
- package/dist/model/storage/CounterModel.js +3 -0
- package/dist/model/storage/DashboardTypeModel.d.ts +9 -0
- package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -0
- package/dist/model/storage/DashboardTypeModel.js +3 -0
- package/dist/model/storage/DeletedRecordModel.d.ts +7 -0
- package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -0
- package/dist/model/storage/DeletedRecordModel.js +3 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -0
- package/dist/model/storage/NamedQueryModel.d.ts +13 -0
- package/dist/model/storage/NamedQueryModel.d.ts.map +1 -0
- package/dist/model/storage/NamedQueryModel.js +17 -0
- package/dist/model/storage/RecordAuditModel.d.ts +15 -0
- package/dist/model/storage/RecordAuditModel.d.ts.map +1 -0
- package/dist/model/storage/RecordAuditModel.js +28 -0
- package/dist/model/storage/RecordModel.d.ts +42 -0
- package/dist/model/storage/RecordModel.d.ts.map +1 -0
- package/dist/model/storage/RecordModel.js +3 -0
- package/dist/model/storage/RecordTypeModel.d.ts +36 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -0
- package/dist/model/storage/RecordTypeModel.js +43 -0
- package/dist/model/storage/ReportModel.d.ts +5 -0
- package/dist/model/storage/ReportModel.d.ts.map +1 -0
- package/dist/model/storage/ReportModel.js +3 -0
- package/dist/model/storage/RoleModel.d.ts +9 -0
- package/dist/model/storage/RoleModel.d.ts.map +1 -0
- package/dist/model/storage/RoleModel.js +12 -0
- package/dist/model/storage/UserAuditModel.d.ts +9 -0
- package/dist/model/storage/UserAuditModel.d.ts.map +1 -0
- package/dist/model/storage/UserAuditModel.js +3 -0
- package/dist/model/storage/UserLinkModel.d.ts +14 -0
- package/dist/model/storage/UserLinkModel.d.ts.map +1 -0
- package/dist/model/storage/UserLinkModel.js +18 -0
- package/dist/model/storage/UserModel.d.ts +25 -0
- package/dist/model/storage/UserModel.d.ts.map +1 -0
- package/dist/model/storage/UserModel.js +26 -0
- package/dist/model/storage/WorkflowStepModel.d.ts +11 -0
- package/dist/model/storage/WorkflowStepModel.d.ts.map +1 -0
- package/dist/model/storage/WorkflowStepModel.js +3 -0
- package/dist/model/storage/WorkspaceAppModel.d.ts +8 -0
- package/dist/model/storage/WorkspaceAppModel.d.ts.map +1 -0
- package/dist/model/storage/WorkspaceAppModel.js +3 -0
- package/dist/model/storage/index.d.ts +18 -0
- package/dist/model/storage/index.d.ts.map +1 -0
- package/dist/model/storage/index.js +19 -0
- package/dist/policies/brandingAndPortal.d.ts +9 -0
- package/dist/policies/brandingAndPortal.d.ts.map +1 -0
- package/dist/policies/brandingAndPortal.js +34 -0
- package/dist/policies/checkAuth.d.ts +9 -0
- package/dist/policies/checkAuth.d.ts.map +1 -0
- package/dist/policies/checkAuth.js +64 -0
- package/dist/policies/checkBrandingValid.d.ts +9 -0
- package/dist/policies/checkBrandingValid.d.ts.map +1 -0
- package/dist/policies/checkBrandingValid.js +40 -0
- package/dist/policies/companionAttachmentUploadAuth.d.ts +9 -0
- package/dist/policies/companionAttachmentUploadAuth.d.ts.map +1 -0
- package/dist/policies/companionAttachmentUploadAuth.js +221 -0
- package/dist/policies/contentSecurityPolicy.d.ts +23 -0
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -0
- package/dist/policies/contentSecurityPolicy.js +135 -0
- package/dist/policies/disallowedHeadRequestHandler.d.ts +8 -0
- package/dist/policies/disallowedHeadRequestHandler.d.ts.map +1 -0
- package/dist/policies/disallowedHeadRequestHandler.js +17 -0
- package/dist/policies/i18nLanguages.d.ts +8 -0
- package/dist/policies/i18nLanguages.d.ts.map +1 -0
- package/dist/policies/i18nLanguages.js +56 -0
- package/dist/policies/index.d.ts +52 -0
- package/dist/policies/index.d.ts.map +1 -0
- package/dist/policies/index.js +70 -0
- package/dist/policies/isAuthenticated.d.ts +9 -0
- package/dist/policies/isAuthenticated.d.ts.map +1 -0
- package/dist/policies/isAuthenticated.js +19 -0
- package/dist/policies/isWebServiceAuthenticated.d.ts +9 -0
- package/dist/policies/isWebServiceAuthenticated.d.ts.map +1 -0
- package/dist/policies/isWebServiceAuthenticated.js +25 -0
- package/dist/policies/menuResolver.d.ts +11 -0
- package/dist/policies/menuResolver.d.ts.map +1 -0
- package/dist/policies/menuResolver.js +58 -0
- package/dist/policies/noCache.d.ts +9 -0
- package/dist/policies/noCache.d.ts.map +1 -0
- package/dist/policies/noCache.js +34 -0
- package/dist/policies/prepWs.d.ts +9 -0
- package/dist/policies/prepWs.d.ts.map +1 -0
- package/dist/policies/prepWs.js +23 -0
- package/dist/policies/sessionAuth.d.ts +11 -0
- package/dist/policies/sessionAuth.d.ts.map +1 -0
- package/dist/policies/sessionAuth.js +23 -0
- package/dist/policies/setLang.d.ts +8 -0
- package/dist/policies/setLang.d.ts.map +1 -0
- package/dist/policies/setLang.js +13 -0
- package/dist/responses/badRequest.d.ts +22 -0
- package/dist/responses/badRequest.d.ts.map +1 -0
- package/dist/responses/badRequest.js +66 -0
- package/dist/responses/created.d.ts +22 -0
- package/dist/responses/created.d.ts.map +1 -0
- package/dist/responses/created.js +55 -0
- package/dist/responses/forbidden.d.ts +22 -0
- package/dist/responses/forbidden.d.ts.map +1 -0
- package/dist/responses/forbidden.js +66 -0
- package/dist/responses/index.d.ts +6 -0
- package/dist/responses/index.d.ts.map +1 -0
- package/dist/responses/index.js +22 -0
- package/dist/responses/ok.d.ts +26 -0
- package/dist/responses/ok.d.ts.map +1 -0
- package/dist/responses/ok.js +59 -0
- package/dist/responses/serverError.d.ts +22 -0
- package/dist/responses/serverError.d.ts.map +1 -0
- package/dist/responses/serverError.js +66 -0
- package/dist/sails.d.ts +238 -0
- package/dist/sails.d.ts.map +1 -0
- package/dist/sails.js +3 -0
- package/dist/services/AgendaQueueService.d.ts +58 -0
- package/dist/services/AgendaQueueService.d.ts.map +1 -0
- package/dist/services/AgendaQueueService.js +225 -0
- package/dist/services/AppConfigService.d.ts +59 -0
- package/dist/services/AppConfigService.d.ts.map +1 -0
- package/dist/services/AppConfigService.js +273 -0
- package/dist/services/AsynchsService.d.ts +20 -0
- package/dist/services/AsynchsService.d.ts.map +1 -0
- package/dist/services/AsynchsService.js +64 -0
- package/dist/services/BrandingLogoService.d.ts +47 -0
- package/dist/services/BrandingLogoService.d.ts.map +1 -0
- package/dist/services/BrandingLogoService.js +212 -0
- package/dist/services/BrandingService.d.ts +70 -0
- package/dist/services/BrandingService.d.ts.map +1 -0
- package/dist/services/BrandingService.js +332 -0
- package/dist/services/CacheService.d.ts +25 -0
- package/dist/services/CacheService.d.ts.map +1 -0
- package/dist/services/CacheService.js +153 -0
- package/dist/services/ConfigService.d.ts +23 -0
- package/dist/services/ConfigService.d.ts.map +1 -0
- package/dist/services/ConfigService.js +379 -0
- package/dist/services/ContrastService.d.ts +77 -0
- package/dist/services/ContrastService.d.ts.map +1 -0
- package/dist/services/ContrastService.js +218 -0
- package/dist/services/DashboardTypesService.d.ts +98 -0
- package/dist/services/DashboardTypesService.d.ts.map +1 -0
- package/dist/services/DashboardTypesService.js +291 -0
- package/dist/services/DoiService.d.ts +36 -0
- package/dist/services/DoiService.d.ts.map +1 -0
- package/dist/services/DoiService.js +494 -0
- package/dist/services/DomSanitizerService.d.ts +105 -0
- package/dist/services/DomSanitizerService.d.ts.map +1 -0
- package/dist/services/DomSanitizerService.js +506 -0
- package/dist/services/EmailService.d.ts +185 -0
- package/dist/services/EmailService.d.ts.map +1 -0
- package/dist/services/EmailService.js +527 -0
- package/dist/services/FigshareService.d.ts +75 -0
- package/dist/services/FigshareService.d.ts.map +1 -0
- package/dist/services/FigshareService.js +2193 -0
- package/dist/services/FormRecordConsistencyService.d.ts +156 -0
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -0
- package/dist/services/FormRecordConsistencyService.js +516 -0
- package/dist/services/FormsService.d.ts +65 -0
- package/dist/services/FormsService.d.ts.map +1 -0
- package/dist/services/FormsService.js +580 -0
- package/dist/services/I18nEntriesService.d.ts +80 -0
- package/dist/services/I18nEntriesService.d.ts.map +1 -0
- package/dist/services/I18nEntriesService.js +469 -0
- package/dist/services/IntegrationAuditService.d.ts.map +1 -0
- package/dist/services/NamedQueryService.d.ts +87 -0
- package/dist/services/NamedQueryService.d.ts.map +1 -0
- package/dist/services/NamedQueryService.js +396 -0
- package/dist/services/NavigationService.d.ts +115 -0
- package/dist/services/NavigationService.d.ts.map +1 -0
- package/dist/services/NavigationService.js +553 -0
- package/dist/services/OniService.d.ts +77 -0
- package/dist/services/OniService.d.ts.map +1 -0
- package/dist/services/OniService.js +753 -0
- package/dist/services/OrcidService.d.ts +30 -0
- package/dist/services/OrcidService.d.ts.map +1 -0
- package/dist/services/OrcidService.js +126 -0
- package/dist/services/PathRulesService.d.ts +57 -0
- package/dist/services/PathRulesService.d.ts.map +1 -0
- package/dist/services/PathRulesService.js +129 -0
- package/dist/services/RDMPService.d.ts +102 -0
- package/dist/services/RDMPService.d.ts.map +1 -0
- package/dist/services/RDMPService.js +767 -0
- package/dist/services/RaidService.d.ts +83 -0
- package/dist/services/RaidService.d.ts.map +1 -0
- package/dist/services/RaidService.js +556 -0
- package/dist/services/RecordTypesService.d.ts +27 -0
- package/dist/services/RecordTypesService.d.ts.map +1 -0
- package/dist/services/RecordTypesService.js +106 -0
- package/dist/services/RecordsService.d.ts +129 -0
- package/dist/services/RecordsService.d.ts.map +1 -0
- package/dist/services/RecordsService.js +1477 -0
- package/dist/services/ReportsService.d.ts +99 -0
- package/dist/services/ReportsService.d.ts.map +1 -0
- package/dist/services/ReportsService.js +475 -0
- package/dist/services/RolesService.d.ts +41 -0
- package/dist/services/RolesService.d.ts.map +1 -0
- package/dist/services/RolesService.js +171 -0
- package/dist/services/RvaImportService.d.ts +56 -0
- package/dist/services/RvaImportService.d.ts.map +1 -0
- package/dist/services/RvaImportService.js +410 -0
- package/dist/services/SassCompilerService.d.ts +26 -0
- package/dist/services/SassCompilerService.d.ts.map +1 -0
- package/dist/services/SassCompilerService.js +201 -0
- package/dist/services/SolrSearchService.d.ts +52 -0
- package/dist/services/SolrSearchService.d.ts.map +1 -0
- package/dist/services/SolrSearchService.js +463 -0
- package/dist/services/StandardDatastreamService.d.ts +66 -0
- package/dist/services/StandardDatastreamService.d.ts.map +1 -0
- package/dist/services/StandardDatastreamService.js +297 -0
- package/dist/services/StorageManagerService.d.ts +90 -0
- package/dist/services/StorageManagerService.d.ts.map +1 -0
- package/dist/services/StorageManagerService.js +234 -0
- package/dist/services/TemplateService.d.ts +65 -0
- package/dist/services/TemplateService.d.ts.map +1 -0
- package/dist/services/TemplateService.js +208 -0
- package/dist/services/TranslationService.d.ts +38 -0
- package/dist/services/TranslationService.d.ts.map +1 -0
- package/dist/services/TranslationService.js +358 -0
- package/dist/services/TriggerService.d.ts +72 -0
- package/dist/services/TriggerService.d.ts.map +1 -0
- package/dist/services/TriggerService.js +554 -0
- package/dist/services/UsersService.d.ts +174 -0
- package/dist/services/UsersService.d.ts.map +1 -0
- package/dist/services/UsersService.js +2108 -0
- package/dist/services/ViewUtilsService.d.ts +36 -0
- package/dist/services/ViewUtilsService.d.ts.map +1 -0
- package/dist/services/ViewUtilsService.js +120 -0
- package/dist/services/VocabService.d.ts +81 -0
- package/dist/services/VocabService.d.ts.map +1 -0
- package/dist/services/VocabService.js +424 -0
- package/dist/services/VocabularyService.d.ts +115 -0
- package/dist/services/VocabularyService.d.ts.map +1 -0
- package/dist/services/VocabularyService.js +752 -0
- package/dist/services/WorkflowStepsService.d.ts +29 -0
- package/dist/services/WorkflowStepsService.d.ts.map +1 -0
- package/dist/services/WorkflowStepsService.js +110 -0
- package/dist/services/WorkspaceAsyncService.d.ts +34 -0
- package/dist/services/WorkspaceAsyncService.d.ts.map +1 -0
- package/dist/services/WorkspaceAsyncService.js +68 -0
- package/dist/services/WorkspaceService.d.ts +67 -0
- package/dist/services/WorkspaceService.d.ts.map +1 -0
- package/dist/services/WorkspaceService.js +148 -0
- package/dist/services/WorkspaceTypesService.d.ts +33 -0
- package/dist/services/WorkspaceTypesService.d.ts.map +1 -0
- package/dist/services/WorkspaceTypesService.js +89 -0
- package/dist/services/doi-v2/audit.d.ts.map +1 -0
- package/dist/services/doi-v2/bindings.d.ts.map +1 -0
- package/dist/services/doi-v2/config.d.ts.map +1 -0
- package/dist/services/doi-v2/context.d.ts.map +1 -0
- package/dist/services/doi-v2/http.d.ts.map +1 -0
- package/dist/services/doi-v2/payload.d.ts.map +1 -0
- package/dist/services/doi-v2/profiles.d.ts.map +1 -0
- package/dist/services/doi-v2/runtime.d.ts.map +1 -0
- package/dist/services/doi-v2/types.d.ts.map +1 -0
- package/dist/services/figshare-v2/assets.d.ts.map +1 -0
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -0
- package/dist/services/figshare-v2/config.d.ts.map +1 -0
- package/dist/services/figshare-v2/context.d.ts.map +1 -0
- package/dist/services/figshare-v2/embargo.d.ts.map +1 -0
- package/dist/services/figshare-v2/http.d.ts.map +1 -0
- package/dist/services/figshare-v2/metadata.d.ts.map +1 -0
- package/dist/services/figshare-v2/observability.d.ts.map +1 -0
- package/dist/services/figshare-v2/plan.d.ts.map +1 -0
- package/dist/services/figshare-v2/publish.d.ts.map +1 -0
- package/dist/services/figshare-v2/queue.d.ts.map +1 -0
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -0
- package/dist/services/figshare-v2/types.d.ts.map +1 -0
- package/dist/services/figshare-v2/workflow.d.ts.map +1 -0
- package/dist/services/figshare-v2/writeback.d.ts.map +1 -0
- package/dist/services/index.d.ts +136 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +276 -0
- package/dist/shims/index.d.ts +9 -0
- package/dist/shims/index.d.ts.map +1 -0
- package/dist/shims/index.js +15 -0
- package/dist/shims/momentShim.d.ts +7 -0
- package/dist/shims/momentShim.d.ts.map +1 -0
- package/dist/shims/momentShim.js +69 -0
- package/dist/transformers/ExportJSONTransformer.d.ts +16 -0
- package/dist/transformers/ExportJSONTransformer.d.ts.map +1 -0
- package/dist/transformers/ExportJSONTransformer.js +90 -0
- package/dist/utilities/ContextVariableUtils.d.ts +8 -0
- package/dist/utilities/ContextVariableUtils.d.ts.map +1 -0
- package/dist/utilities/ContextVariableUtils.js +91 -0
- package/dist/utilities/TransactionUtils.d.ts +7 -0
- package/dist/utilities/TransactionUtils.d.ts.map +1 -0
- package/dist/utilities/TransactionUtils.js +25 -0
- package/dist/visitor/attachment-fields.visitor.d.ts +37 -0
- package/dist/visitor/attachment-fields.visitor.d.ts.map +1 -0
- package/dist/visitor/attachment-fields.visitor.js +93 -0
- package/dist/visitor/client.visitor.d.ts +211 -0
- package/dist/visitor/client.visitor.d.ts.map +1 -0
- package/dist/visitor/client.visitor.js +865 -0
- package/dist/visitor/construct.visitor.d.ts +219 -0
- package/dist/visitor/construct.visitor.d.ts.map +1 -0
- package/dist/visitor/construct.visitor.js +1499 -0
- package/dist/visitor/context-variables.visitor.d.ts +51 -0
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -0
- package/dist/visitor/context-variables.visitor.js +192 -0
- package/dist/visitor/data-value.visitor.d.ts +159 -0
- package/dist/visitor/data-value.visitor.d.ts.map +1 -0
- package/dist/visitor/data-value.visitor.js +310 -0
- package/dist/visitor/json-type-def.visitor.d.ts +155 -0
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -0
- package/dist/visitor/json-type-def.visitor.js +384 -0
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +244 -0
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -0
- package/dist/visitor/migrate-config-v4-v5.visitor.js +2941 -0
- package/dist/visitor/template.visitor.d.ts +163 -0
- package/dist/visitor/template.visitor.d.ts.map +1 -0
- package/dist/visitor/template.visitor.js +397 -0
- package/dist/visitor/validator.visitor.d.ts +123 -0
- package/dist/visitor/validator.visitor.d.ts.map +1 -0
- package/dist/visitor/validator.visitor.js +480 -0
- package/dist/visitor/visitor-helpers.d.ts +15 -0
- package/dist/visitor/visitor-helpers.d.ts.map +1 -0
- package/dist/visitor/visitor-helpers.js +191 -0
- package/dist/visitor/vocab-inline.visitor.d.ts +33 -0
- package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -0
- package/dist/visitor/vocab-inline.visitor.js +173 -0
- package/dist/waterline-models/AppConfig.d.ts +19 -0
- package/dist/waterline-models/AppConfig.d.ts.map +1 -0
- package/dist/waterline-models/AppConfig.js +38 -0
- package/dist/waterline-models/AsynchProgress.d.ts +37 -0
- package/dist/waterline-models/AsynchProgress.d.ts.map +1 -0
- package/dist/waterline-models/AsynchProgress.js +83 -0
- package/dist/waterline-models/BrandingConfig.d.ts +28 -0
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -0
- package/dist/waterline-models/BrandingConfig.js +132 -0
- package/dist/waterline-models/BrandingConfigHistory.d.ts +25 -0
- package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -0
- package/dist/waterline-models/BrandingConfigHistory.js +66 -0
- package/dist/waterline-models/CacheEntry.d.ts +18 -0
- package/dist/waterline-models/CacheEntry.d.ts.map +1 -0
- package/dist/waterline-models/CacheEntry.js +38 -0
- package/dist/waterline-models/Counter.d.ts +19 -0
- package/dist/waterline-models/Counter.d.ts.map +1 -0
- package/dist/waterline-models/Counter.js +38 -0
- package/dist/waterline-models/DashboardType.d.ts +23 -0
- package/dist/waterline-models/DashboardType.d.ts.map +1 -0
- package/dist/waterline-models/DashboardType.js +53 -0
- package/dist/waterline-models/Form.d.ts +21 -0
- package/dist/waterline-models/Form.d.ts.map +1 -0
- package/dist/waterline-models/Form.js +38 -0
- package/dist/waterline-models/I18nBundle.d.ts +29 -0
- package/dist/waterline-models/I18nBundle.d.ts.map +1 -0
- package/dist/waterline-models/I18nBundle.js +85 -0
- package/dist/waterline-models/I18nTranslation.d.ts +32 -0
- package/dist/waterline-models/I18nTranslation.d.ts.map +1 -0
- package/dist/waterline-models/I18nTranslation.js +110 -0
- package/dist/waterline-models/NamedQuery.d.ts +29 -0
- package/dist/waterline-models/NamedQuery.d.ts.map +1 -0
- package/dist/waterline-models/NamedQuery.js +68 -0
- package/dist/waterline-models/PathRule.d.ts +26 -0
- package/dist/waterline-models/PathRule.d.ts.map +1 -0
- package/dist/waterline-models/PathRule.js +53 -0
- package/dist/waterline-models/RBReport.d.ts +38 -0
- package/dist/waterline-models/RBReport.d.ts.map +1 -0
- package/dist/waterline-models/RBReport.js +73 -0
- package/dist/waterline-models/RecordType.d.ts +37 -0
- package/dist/waterline-models/RecordType.d.ts.map +1 -0
- package/dist/waterline-models/RecordType.js +88 -0
- package/dist/waterline-models/Role.d.ts +19 -0
- package/dist/waterline-models/Role.d.ts.map +1 -0
- package/dist/waterline-models/Role.js +38 -0
- package/dist/waterline-models/ThemeConfig.d.ts +16 -0
- package/dist/waterline-models/ThemeConfig.d.ts.map +1 -0
- package/dist/waterline-models/ThemeConfig.js +33 -0
- package/dist/waterline-models/User.d.ts +50 -0
- package/dist/waterline-models/User.d.ts.map +1 -0
- package/dist/waterline-models/User.js +151 -0
- package/dist/waterline-models/UserAudit.d.ts +18 -0
- package/dist/waterline-models/UserAudit.d.ts.map +1 -0
- package/dist/waterline-models/UserAudit.js +38 -0
- package/dist/waterline-models/UserLink.d.ts +30 -0
- package/dist/waterline-models/UserLink.d.ts.map +1 -0
- package/dist/waterline-models/UserLink.js +62 -0
- package/dist/waterline-models/Vocabulary.d.ts +38 -0
- package/dist/waterline-models/Vocabulary.d.ts.map +1 -0
- package/dist/waterline-models/Vocabulary.js +183 -0
- package/dist/waterline-models/VocabularyEntry.d.ts +33 -0
- package/dist/waterline-models/VocabularyEntry.d.ts.map +1 -0
- package/dist/waterline-models/VocabularyEntry.js +210 -0
- package/dist/waterline-models/WorkflowStep.d.ts +25 -0
- package/dist/waterline-models/WorkflowStep.d.ts.map +1 -0
- package/dist/waterline-models/WorkflowStep.js +53 -0
- package/dist/waterline-models/WorkspaceApp.d.ts +19 -0
- package/dist/waterline-models/WorkspaceApp.d.ts.map +1 -0
- package/dist/waterline-models/WorkspaceApp.js +50 -0
- package/dist/waterline-models/WorkspaceAsync.d.ts +32 -0
- package/dist/waterline-models/WorkspaceAsync.d.ts.map +1 -0
- package/dist/waterline-models/WorkspaceAsync.js +73 -0
- package/dist/waterline-models/WorkspaceType.d.ts +25 -0
- package/dist/waterline-models/WorkspaceType.d.ts.map +1 -0
- package/dist/waterline-models/WorkspaceType.js +53 -0
- package/dist/waterline-models/index.d.ts +53 -0
- package/dist/waterline-models/index.d.ts.map +1 -0
- package/dist/waterline-models/index.js +99 -0
- package/dist/waterline-models/types.d.ts +8 -0
- package/dist/waterline-models/types.d.ts.map +1 -0
- package/dist/waterline-models/types.js +3 -0
- package/package.json +150 -0
- package/redbox-loader-templates/bootstrap-shim.js.hbs +17 -0
- package/redbox-loader-templates/form-config-index.js.hbs +11 -0
|
@@ -0,0 +1,767 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.Services = void 0;
|
|
25
|
+
const rxjs_1 = require("rxjs");
|
|
26
|
+
const operators_1 = require("rxjs/operators");
|
|
27
|
+
const CoreService_1 = require("../CoreService");
|
|
28
|
+
const RBValidationError_1 = require("../model/RBValidationError");
|
|
29
|
+
const momentShim_1 = require("../shims/momentShim");
|
|
30
|
+
const numeral_1 = __importDefault(require("numeral"));
|
|
31
|
+
// removed duplicate isObservable import
|
|
32
|
+
var Services;
|
|
33
|
+
(function (Services) {
|
|
34
|
+
/**
|
|
35
|
+
* WorkflowSteps related functions...
|
|
36
|
+
*
|
|
37
|
+
* Author: <a href='https://github.com/shilob' target='_blank'>Shilo Banihit</a>
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
class RDMPS extends CoreService_1.Services.Core.Service {
|
|
41
|
+
queueService;
|
|
42
|
+
_exportedMethods = [
|
|
43
|
+
'assignPermissions',
|
|
44
|
+
'complexAssignPermissions',
|
|
45
|
+
'processRecordCounters',
|
|
46
|
+
'stripUserBasedPermissions',
|
|
47
|
+
'restoreUserBasedPermissions',
|
|
48
|
+
'runTemplates',
|
|
49
|
+
'addWorkspaceToRecord',
|
|
50
|
+
'queuedTriggerSubscriptionHandler',
|
|
51
|
+
'queueTriggerCall',
|
|
52
|
+
'checkTotalSizeOfFilesInRecord',
|
|
53
|
+
'removeWorkspaceFromRecord',
|
|
54
|
+
'init',
|
|
55
|
+
];
|
|
56
|
+
constructor() {
|
|
57
|
+
super();
|
|
58
|
+
this.logHeader = "TriggerService::";
|
|
59
|
+
}
|
|
60
|
+
init() {
|
|
61
|
+
const that = this;
|
|
62
|
+
this.registerSailsHook('on', 'ready', function () {
|
|
63
|
+
that.queueService = sails.services[sails.config.queue.serviceName];
|
|
64
|
+
sails.log.verbose(`${that.logHeader}: Assigned queueService`, that.queueService);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* This is a trigger service method to bump all configured increment counters.
|
|
69
|
+
*
|
|
70
|
+
*
|
|
71
|
+
* @author <a target='_' href='https://github.com/shilob'>Shilo Banihit</a>
|
|
72
|
+
* @param oid
|
|
73
|
+
* @param record
|
|
74
|
+
* @param options
|
|
75
|
+
* expects:
|
|
76
|
+
* {
|
|
77
|
+
* "counters": [
|
|
78
|
+
* {
|
|
79
|
+
* "field_name": "<name of the field to increment in the record>"
|
|
80
|
+
* "strategy": "<strategy of the increment>",
|
|
81
|
+
* possible values:
|
|
82
|
+
* - "field": increase the previous value by one
|
|
83
|
+
* - "global": increase the previous value of the global counter document identified by the record's brandingId and field_name
|
|
84
|
+
* "prefix": "<the language key entry to prefix the value>"
|
|
85
|
+
* }
|
|
86
|
+
* ]
|
|
87
|
+
* }
|
|
88
|
+
* @param user
|
|
89
|
+
* @return
|
|
90
|
+
*/
|
|
91
|
+
async processRecordCounters(oid, record, options, _user) {
|
|
92
|
+
const recordData = record;
|
|
93
|
+
const optionsData = options;
|
|
94
|
+
const brandId = recordData.metaMetadata.brandId;
|
|
95
|
+
let processRecordCountersLogLevel = 'verbose';
|
|
96
|
+
if (sails.config.record.processRecordCountersLogLevel != null) {
|
|
97
|
+
processRecordCountersLogLevel = sails.config.record.processRecordCountersLogLevel;
|
|
98
|
+
sails.log.info(`processRecordCounters - log level ${sails.config.record.processRecordCountersLogLevel}`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
sails.log.info(`processRecordCounters - log level ${processRecordCountersLogLevel}`);
|
|
102
|
+
}
|
|
103
|
+
//For all projects that don't set environment variable "sails_record__processRecordCountersLogLevel" in docker-compose.yml
|
|
104
|
+
//the log level of this function is going to be verbose which is the standard but in example for CQU it will be set to
|
|
105
|
+
//error to make it so this function always prints logging until the RDMPs missing IDs issue is fixed
|
|
106
|
+
sails.log[processRecordCountersLogLevel](`processRecordCounters - brandId: ${recordData.metaMetadata.brandId}`);
|
|
107
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - options:');
|
|
108
|
+
sails.log[processRecordCountersLogLevel](options);
|
|
109
|
+
// get the counters
|
|
110
|
+
for (const counter of optionsData.counters ?? []) {
|
|
111
|
+
const counterData = counter;
|
|
112
|
+
sails.log[processRecordCountersLogLevel](`processRecordCounters - counter.strategy: ${counterData.strategy}`);
|
|
113
|
+
if (counterData.strategy == "global") {
|
|
114
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - before - counter:');
|
|
115
|
+
sails.log[processRecordCountersLogLevel](counter);
|
|
116
|
+
const promiseCounter = await (0, rxjs_1.firstValueFrom)(this.getObservable(Counter.findOrCreate({
|
|
117
|
+
name: counterData.field_name,
|
|
118
|
+
branding: brandId
|
|
119
|
+
}, {
|
|
120
|
+
name: counterData.field_name,
|
|
121
|
+
branding: brandId,
|
|
122
|
+
value: 0
|
|
123
|
+
})));
|
|
124
|
+
if (_.isEmpty(promiseCounter)) {
|
|
125
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - promiseCounter isEmpty');
|
|
126
|
+
sails.log[processRecordCountersLogLevel](promiseCounter);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - promiseCounter:');
|
|
130
|
+
sails.log[processRecordCountersLogLevel](promiseCounter);
|
|
131
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - after - counter:');
|
|
132
|
+
sails.log[processRecordCountersLogLevel](counter);
|
|
133
|
+
const newVal = promiseCounter[0].value + 1;
|
|
134
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - newVal:');
|
|
135
|
+
sails.log[processRecordCountersLogLevel](newVal);
|
|
136
|
+
//increment counter to get new value for the record's field associated to the counter
|
|
137
|
+
this.incrementCounter(recordData, counterData, newVal);
|
|
138
|
+
//Update global counter
|
|
139
|
+
const updateOnePromise = await (0, rxjs_1.firstValueFrom)(this.getObservable(Counter.updateOne({
|
|
140
|
+
id: promiseCounter[0].id
|
|
141
|
+
}, {
|
|
142
|
+
value: newVal
|
|
143
|
+
})));
|
|
144
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - updateOnePromise:');
|
|
145
|
+
sails.log[processRecordCountersLogLevel](updateOnePromise);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (counterData.strategy == "field") {
|
|
149
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - field - enter');
|
|
150
|
+
let srcVal = (recordData.metadata ?? {})[counterData.field_name ?? ''];
|
|
151
|
+
if (!_.isEmpty(counterData.source_field)) {
|
|
152
|
+
srcVal = (recordData.metadata ?? {})[counterData.source_field ?? ''];
|
|
153
|
+
}
|
|
154
|
+
const newVal = _.isUndefined(srcVal) || _.isEmpty(srcVal) ? 1 : _.toNumber(srcVal) + 1;
|
|
155
|
+
sails.log[processRecordCountersLogLevel](`processRecordCounters - field - newVal: ${newVal}`);
|
|
156
|
+
this.incrementCounter(recordData, counterData, newVal);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
sails.log[processRecordCountersLogLevel]('processRecordCounters - end');
|
|
160
|
+
return record;
|
|
161
|
+
}
|
|
162
|
+
incrementCounter(record, counter, newVal) {
|
|
163
|
+
const counterData = counter;
|
|
164
|
+
const metadata = record.metadata ?? {};
|
|
165
|
+
let processRecordCountersLogLevel = 'verbose';
|
|
166
|
+
if (sails.config.record.processRecordCountersLogLevel != null) {
|
|
167
|
+
processRecordCountersLogLevel = sails.config.record.processRecordCountersLogLevel;
|
|
168
|
+
sails.log.info(`incrementCounter - log level ${sails.config.record.processRecordCountersLogLevel}`);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
sails.log.info(`incrementCounter - log level ${processRecordCountersLogLevel}`);
|
|
172
|
+
}
|
|
173
|
+
//For all projects that don't set environment variable "sails_record__processRecordCountersLogLevel" in docker-compose.yml
|
|
174
|
+
//the log level of this function is going to be verbose which is the standard but in example for CQU it will be set to
|
|
175
|
+
//error to make it so this function always prints logging until the RDMPs missing IDs issue is fixed
|
|
176
|
+
sails.log[processRecordCountersLogLevel]('incrementCounter - enter');
|
|
177
|
+
if (!_.isEmpty(counterData.template)) {
|
|
178
|
+
sails.log[processRecordCountersLogLevel](`incrementCounter - newVal: ${newVal}`);
|
|
179
|
+
sails.log[processRecordCountersLogLevel]('incrementCounter - counter:');
|
|
180
|
+
sails.log[processRecordCountersLogLevel](counter);
|
|
181
|
+
const templateData = _.extend({ newVal: newVal }, counterData);
|
|
182
|
+
const templateImportData = {
|
|
183
|
+
imports: {
|
|
184
|
+
moment: momentShim_1.momentShim,
|
|
185
|
+
numeral: numeral_1.default
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
if (_.isString(counterData.template)) {
|
|
189
|
+
const compiledTemplate = _.template(counterData.template, templateImportData);
|
|
190
|
+
counterData.template = compiledTemplate;
|
|
191
|
+
}
|
|
192
|
+
newVal = counterData.template(templateData);
|
|
193
|
+
}
|
|
194
|
+
const recVal = `${TranslationService.t(counterData.prefix ?? '')}${newVal}`;
|
|
195
|
+
sails.log[processRecordCountersLogLevel](`incrementCounter - recVal: ${recVal}`);
|
|
196
|
+
const fieldName = counterData.field_name ?? '';
|
|
197
|
+
if (fieldName) {
|
|
198
|
+
_.set(metadata, fieldName, recVal);
|
|
199
|
+
}
|
|
200
|
+
record.metadata = metadata;
|
|
201
|
+
const arrayPath = counterData.add_value_to_array ?? '';
|
|
202
|
+
if (!_.isEmpty(arrayPath)) {
|
|
203
|
+
const arrayVal = _.get(record, arrayPath, []);
|
|
204
|
+
arrayVal.push(recVal);
|
|
205
|
+
_.set(record, arrayPath, arrayVal);
|
|
206
|
+
sails.log[processRecordCountersLogLevel]('incrementCounter - arrayVal:');
|
|
207
|
+
sails.log[processRecordCountersLogLevel](arrayVal);
|
|
208
|
+
}
|
|
209
|
+
sails.log[processRecordCountersLogLevel]('incrementCounter - end');
|
|
210
|
+
}
|
|
211
|
+
checkTotalSizeOfFilesInRecord(oid, record, options, user) {
|
|
212
|
+
let functionLogLevel = 'verbose';
|
|
213
|
+
const optionsObj = options;
|
|
214
|
+
const triggerCondition = _.get(optionsObj, "triggerCondition", "");
|
|
215
|
+
if (_.isEmpty(triggerCondition) || this.metTriggerCondition(oid, record, optionsObj, user) === "true") {
|
|
216
|
+
if (sails.config.record.checkTotalSizeOfFilesInRecordLogLevel != null) {
|
|
217
|
+
functionLogLevel = sails.config.record.checkTotalSizeOfFilesInRecordLogLevel;
|
|
218
|
+
sails.log.info(`checkTotalSizeOfFilesInRecord - log level ${sails.config.record.checkTotalSizeOfFilesInRecordLogLevel}`);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
sails.log.info(`checkTotalSizeOfFilesInRecord - log level ${functionLogLevel}`);
|
|
222
|
+
}
|
|
223
|
+
const dataLocations = _.get(record, 'metadata.dataLocations', []);
|
|
224
|
+
sails.log[functionLogLevel]('checkTotalSizeOfFilesInRecord - dataLocations');
|
|
225
|
+
sails.log[functionLogLevel](dataLocations);
|
|
226
|
+
if (Array.isArray(dataLocations)) {
|
|
227
|
+
let foundAttachment = false;
|
|
228
|
+
for (const attachmentFile of dataLocations) {
|
|
229
|
+
const attachmentObj = attachmentFile;
|
|
230
|
+
if (!_.isUndefined(attachmentObj) && !_.isEmpty(attachmentObj) && attachmentObj.type == 'attachment' && _.toInteger(attachmentObj.size) > 0) {
|
|
231
|
+
foundAttachment = true;
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
sails.log[functionLogLevel]('checkTotalSizeOfFilesInRecord - foundAttachment ' + foundAttachment);
|
|
236
|
+
if (foundAttachment) {
|
|
237
|
+
let totalSizeOfFilesInRecord = 0;
|
|
238
|
+
for (const attachmentFile of dataLocations) {
|
|
239
|
+
const attachmentObj = attachmentFile;
|
|
240
|
+
sails.log[functionLogLevel](attachmentObj);
|
|
241
|
+
if (!_.isUndefined(attachmentObj.size)) {
|
|
242
|
+
totalSizeOfFilesInRecord = totalSizeOfFilesInRecord + _.toInteger(attachmentObj.size);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
sails.log[functionLogLevel]('checkTotalSizeOfFilesInRecord - totalSizeOfFilesInRecord ' + totalSizeOfFilesInRecord);
|
|
246
|
+
const maxUploadSize = sails.config.record.maxUploadSize;
|
|
247
|
+
if (totalSizeOfFilesInRecord > maxUploadSize) {
|
|
248
|
+
let maxUploadSizeMessage = TranslationService.t('max-total-files-upload-size-validation-error');
|
|
249
|
+
const alternativeMessageCode = optionsObj['maxUploadSizeMessageCode'];
|
|
250
|
+
if (!_.isUndefined(alternativeMessageCode)) {
|
|
251
|
+
let replaceOrAppend = optionsObj['replaceOrAppend'];
|
|
252
|
+
if (_.isUndefined(replaceOrAppend)) {
|
|
253
|
+
replaceOrAppend = 'append';
|
|
254
|
+
}
|
|
255
|
+
if (replaceOrAppend == 'replace') {
|
|
256
|
+
maxUploadSizeMessage = TranslationService.t(String(alternativeMessageCode));
|
|
257
|
+
}
|
|
258
|
+
else if (replaceOrAppend == 'append') {
|
|
259
|
+
const tmpMaxUploadSizeMessage = maxUploadSizeMessage + ' ' + TranslationService.t(String(alternativeMessageCode));
|
|
260
|
+
maxUploadSizeMessage = tmpMaxUploadSizeMessage;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const maxSizeFormatted = this.formatBytes(maxUploadSize);
|
|
264
|
+
const interMessage = TranslationService.tInter(maxUploadSizeMessage, { maxUploadSize: maxSizeFormatted });
|
|
265
|
+
throw new RBValidationError_1.RBValidationError({
|
|
266
|
+
message: `Total size of files ${totalSizeOfFilesInRecord} was more then the max upload size ${maxUploadSize}`,
|
|
267
|
+
displayErrors: [{ detail: interMessage, meta: { totalSizeOfFilesInRecord, maxUploadSize } }],
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
sails.log[functionLogLevel]('checkTotalSizeOfFilesInRecord - end');
|
|
273
|
+
}
|
|
274
|
+
return record;
|
|
275
|
+
}
|
|
276
|
+
//Fixed version, unminified and ES6'ed
|
|
277
|
+
//taken from SO
|
|
278
|
+
//https://stackoverflow.com/questions/15900485/correct-way-to-convert-size-in-bytes-to-kb-mb-gb-in-javascript
|
|
279
|
+
formatBytes(bytes, decimals = 2) {
|
|
280
|
+
if (bytes === 0)
|
|
281
|
+
return '0 Bytes';
|
|
282
|
+
const k = 1024;
|
|
283
|
+
const dm = decimals < 0 ? 0 : decimals;
|
|
284
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
285
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
286
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
|
|
287
|
+
}
|
|
288
|
+
addEmailToList(contributor, emailProperty, emailList, lowerCaseEmailAddresses = true) {
|
|
289
|
+
let contributorEmailAddress = _.get(contributor, emailProperty);
|
|
290
|
+
if (!contributorEmailAddress) {
|
|
291
|
+
if (!contributor) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
contributorEmailAddress = contributor;
|
|
295
|
+
}
|
|
296
|
+
if (!_.isEmpty(contributorEmailAddress) && !_.isUndefined(contributorEmailAddress)) {
|
|
297
|
+
if (Array.isArray(contributorEmailAddress) && contributorEmailAddress.length > 0) {
|
|
298
|
+
contributorEmailAddress = contributorEmailAddress[0];
|
|
299
|
+
}
|
|
300
|
+
if (_.isString(contributorEmailAddress)) {
|
|
301
|
+
sails.log.verbose(`Pushing contrib email address ${contributorEmailAddress}`);
|
|
302
|
+
if (lowerCaseEmailAddresses) {
|
|
303
|
+
contributorEmailAddress = contributorEmailAddress.toLowerCase();
|
|
304
|
+
}
|
|
305
|
+
emailList.push(contributorEmailAddress);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
populateContribList(contribProperties, record, emailProperty, emailList) {
|
|
310
|
+
_.each(contribProperties, (editContributorProperty) => {
|
|
311
|
+
const editContributorPath = String(editContributorProperty ?? '');
|
|
312
|
+
const editContributor = _.get(record, editContributorPath, null);
|
|
313
|
+
if (editContributor) {
|
|
314
|
+
sails.log.verbose(`Contributor:`);
|
|
315
|
+
sails.log.verbose(JSON.stringify(editContributor));
|
|
316
|
+
if (_.isArray(editContributor)) {
|
|
317
|
+
_.each(editContributor, (contributor) => {
|
|
318
|
+
this.addEmailToList(contributor, emailProperty, emailList);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
this.addEmailToList(editContributor, emailProperty, emailList);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
return _.uniq(emailList);
|
|
327
|
+
}
|
|
328
|
+
getContribListByRule(contribProperties, record, rule, emailProperty, emailList) {
|
|
329
|
+
const compiledRule = _.template(String(rule ?? ''));
|
|
330
|
+
_.each(contribProperties, (contributorProperty) => {
|
|
331
|
+
sails.log.verbose(`Processing contributor property ${contributorProperty}`);
|
|
332
|
+
const contributorPath = String(contributorProperty ?? '');
|
|
333
|
+
const contributor = _.get(record, contributorPath, null);
|
|
334
|
+
if (contributor) {
|
|
335
|
+
sails.log.verbose(`Contributor:`);
|
|
336
|
+
sails.log.verbose(JSON.stringify(contributor));
|
|
337
|
+
if (_.isArray(contributor)) {
|
|
338
|
+
_.each(contributor, (individualContributor) => {
|
|
339
|
+
const compiledResult = String(compiledRule(individualContributor));
|
|
340
|
+
if (compiledResult === "true") {
|
|
341
|
+
this.addEmailToList(individualContributor, emailProperty, emailList);
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
const compiledResult = String(compiledRule(contributor));
|
|
347
|
+
if (compiledResult === "true") {
|
|
348
|
+
this.addEmailToList(contributor, emailProperty, emailList);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
return _.uniq(emailList);
|
|
354
|
+
}
|
|
355
|
+
filterPending(users, userEmails, userList) {
|
|
356
|
+
_.each(users, (user) => {
|
|
357
|
+
if (user != null) {
|
|
358
|
+
const userObj = user;
|
|
359
|
+
_.remove(userEmails, (email) => {
|
|
360
|
+
return email == userObj['email'];
|
|
361
|
+
});
|
|
362
|
+
const username = userObj['username'];
|
|
363
|
+
if (_.isString(username) && !_.isEmpty(username)) {
|
|
364
|
+
userList.push(username);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
queueTriggerCall(oid, record, options, user) {
|
|
370
|
+
const optionsObj = options;
|
|
371
|
+
const triggerCondition = _.get(optionsObj, "triggerCondition", "");
|
|
372
|
+
if (_.isEmpty(triggerCondition) || this.metTriggerCondition(oid, record, optionsObj) === "true") {
|
|
373
|
+
const jobName = String(_.get(optionsObj, "jobName", ""));
|
|
374
|
+
const triggerConfiguration = _.get(optionsObj, "triggerConfiguration", null);
|
|
375
|
+
const queueMessage = {
|
|
376
|
+
oid: oid,
|
|
377
|
+
record: record,
|
|
378
|
+
triggerConfiguration: triggerConfiguration,
|
|
379
|
+
user: user
|
|
380
|
+
};
|
|
381
|
+
sails.log.debug(`${this.logHeader} Queueing up trigger using job name ${jobName}`);
|
|
382
|
+
sails.log.verbose(queueMessage);
|
|
383
|
+
this.queueService.now(jobName, queueMessage);
|
|
384
|
+
}
|
|
385
|
+
return (0, rxjs_1.of)(record);
|
|
386
|
+
}
|
|
387
|
+
queuedTriggerSubscriptionHandler(job) {
|
|
388
|
+
const jobObj = job;
|
|
389
|
+
const data = (jobObj.attrs ?? {});
|
|
390
|
+
const oid = _.get(data, "oid", null);
|
|
391
|
+
const triggerConfiguration = _.get(data, "triggerConfiguration", null);
|
|
392
|
+
const record = _.get(data, "record", null);
|
|
393
|
+
const user = _.get(data, "user", null);
|
|
394
|
+
sails.log.verbose('queuedTriggerSubscriptionHandler Consuming job:');
|
|
395
|
+
sails.log.verbose(data);
|
|
396
|
+
const hookFunctionString = _.get(triggerConfiguration, "function", null);
|
|
397
|
+
sails.log.verbose(`Found hook function string ${hookFunctionString}`);
|
|
398
|
+
if (hookFunctionString != null) {
|
|
399
|
+
const hookFunction = eval(hookFunctionString);
|
|
400
|
+
const options = _.get(triggerConfiguration, "options", {});
|
|
401
|
+
if (_.isFunction(hookFunction)) {
|
|
402
|
+
sails.log.debug(`Triggering queuedtrigger: ${hookFunctionString}`);
|
|
403
|
+
const hookResponse = hookFunction(oid, record, options, user);
|
|
404
|
+
const response = this.convertToObservable(hookResponse);
|
|
405
|
+
return (0, rxjs_1.firstValueFrom)(response);
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
sails.log.error(`queued trigger function: '${hookFunctionString}' did not resolve to a valid function, what I got:`);
|
|
409
|
+
sails.log.error(hookFunction);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
return (0, rxjs_1.of)(record);
|
|
413
|
+
}
|
|
414
|
+
convertToObservable(hookResponse) {
|
|
415
|
+
if ((0, rxjs_1.isObservable)(hookResponse)) {
|
|
416
|
+
return hookResponse;
|
|
417
|
+
}
|
|
418
|
+
return (0, rxjs_1.from)(hookResponse);
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Assign editor and viewer permissions to the record using rules.
|
|
422
|
+
* @param oid {string} The identifier.
|
|
423
|
+
* @param record The record to update.
|
|
424
|
+
* @param options The options for modifying the record.
|
|
425
|
+
*/
|
|
426
|
+
complexAssignPermissions(oid, record, options) {
|
|
427
|
+
const optionsObj = options;
|
|
428
|
+
const triggerCondition = _.get(optionsObj, "triggerCondition", "");
|
|
429
|
+
if (_.isEmpty(triggerCondition) || this.metTriggerCondition(oid, record, optionsObj) === "true") {
|
|
430
|
+
sails.log.verbose(`Complex Assign Permissions executing on oid: ${oid}, using options:`);
|
|
431
|
+
sails.log.verbose(JSON.stringify(options));
|
|
432
|
+
sails.log.verbose(`With record: `);
|
|
433
|
+
sails.log.verbose(JSON.stringify(record));
|
|
434
|
+
const emailProperty = String(_.get(optionsObj, "emailProperty", "email"));
|
|
435
|
+
const userProperties = _.get(optionsObj, "userProperties", []);
|
|
436
|
+
const viewPermissionRule = _.get(optionsObj, "viewPermissionRule");
|
|
437
|
+
const editPermissionRule = _.get(optionsObj, "editPermissionRule");
|
|
438
|
+
const recordCreatorPermissions = _.get(optionsObj, "recordCreatorPermissions");
|
|
439
|
+
const editContributorObs = [];
|
|
440
|
+
const viewContributorObs = [];
|
|
441
|
+
let editContributorEmails = [];
|
|
442
|
+
let viewContributorEmails = [];
|
|
443
|
+
// get the new editor list...
|
|
444
|
+
editContributorEmails = this.getContribListByRule(userProperties, record, editPermissionRule, emailProperty, editContributorEmails);
|
|
445
|
+
// get the new viewer list...
|
|
446
|
+
viewContributorEmails = this.getContribListByRule(userProperties, record, viewPermissionRule, emailProperty, viewContributorEmails);
|
|
447
|
+
return this.assignContributorRecordPermissions(oid, record, recordCreatorPermissions, editContributorEmails, editContributorObs, viewContributorEmails, viewContributorObs);
|
|
448
|
+
}
|
|
449
|
+
return (0, rxjs_1.of)(record);
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Assign editor and viewer permissions to the record using properties.
|
|
453
|
+
* @param oid {string} The identifier.
|
|
454
|
+
* @param record The record to update.
|
|
455
|
+
* @param options The options for modifying the record.
|
|
456
|
+
*/
|
|
457
|
+
assignPermissions(oid, record, options, user) {
|
|
458
|
+
const optionsObj = options;
|
|
459
|
+
const triggerCondition = _.get(optionsObj, "triggerCondition", "");
|
|
460
|
+
if (_.isEmpty(triggerCondition) || this.metTriggerCondition(oid, record, optionsObj) === "true") {
|
|
461
|
+
sails.log.verbose(`Assign Permissions executing on oid: ${oid}, using options:`);
|
|
462
|
+
sails.log.verbose(JSON.stringify(options));
|
|
463
|
+
sails.log.verbose(`With record: `);
|
|
464
|
+
sails.log.verbose(JSON.stringify(record));
|
|
465
|
+
const emailProperty = String(_.get(optionsObj, "emailProperty", "email"));
|
|
466
|
+
const editContributorProperties = _.get(optionsObj, "editContributorProperties", []);
|
|
467
|
+
const viewContributorProperties = _.get(optionsObj, "viewContributorProperties", []);
|
|
468
|
+
const recordCreatorPermissions = _.get(optionsObj, "recordCreatorPermissions");
|
|
469
|
+
const editContributorObs = [];
|
|
470
|
+
const viewContributorObs = [];
|
|
471
|
+
let editContributorEmails = [];
|
|
472
|
+
let viewContributorEmails = [];
|
|
473
|
+
// get the new editor list...
|
|
474
|
+
editContributorEmails = this.populateContribList(editContributorProperties, record, emailProperty, editContributorEmails);
|
|
475
|
+
// get the new viewer list...
|
|
476
|
+
viewContributorEmails = this.populateContribList(viewContributorProperties, record, emailProperty, viewContributorEmails);
|
|
477
|
+
return this.assignContributorRecordPermissions(oid, record, recordCreatorPermissions, editContributorEmails, editContributorObs, viewContributorEmails, viewContributorObs, user);
|
|
478
|
+
}
|
|
479
|
+
return (0, rxjs_1.of)(record);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Assign contributor permissions to the record.
|
|
483
|
+
* @param oid The identifier.
|
|
484
|
+
* @param record The record to update.
|
|
485
|
+
* @param recordCreatorPermissions {string} The creator permission from the options.
|
|
486
|
+
* @param editContributorEmails {Array<string>} The list of editor emails.
|
|
487
|
+
* @param editContributorObs {Array<Observable>} The list of editor observables.
|
|
488
|
+
* @param viewContributorEmails {Array<string>} The list of viewer emails.
|
|
489
|
+
* @param viewContributorObs {Array<Observable>} The list of viewer observables.
|
|
490
|
+
* @private
|
|
491
|
+
*/
|
|
492
|
+
assignContributorRecordPermissions(oid, record, recordCreatorPermissions, editContributorEmails, editContributorObs, viewContributorEmails, viewContributorObs, user) {
|
|
493
|
+
const auth = (record.authorization ?? {});
|
|
494
|
+
record.authorization = auth;
|
|
495
|
+
const createdBy = record.metaMetadata?.createdBy ?? user?.username;
|
|
496
|
+
const hasContributors = !_.isEmpty(editContributorEmails) || !_.isEmpty(viewContributorEmails);
|
|
497
|
+
if (_.isEmpty(editContributorEmails)) {
|
|
498
|
+
sails.log.error(`No editors for record: ${oid}`);
|
|
499
|
+
}
|
|
500
|
+
if (_.isEmpty(viewContributorEmails)) {
|
|
501
|
+
sails.log.error(`No viewers for record: ${oid}`);
|
|
502
|
+
}
|
|
503
|
+
const useDefaultViewList = _.isEmpty(viewContributorEmails)
|
|
504
|
+
&& (recordCreatorPermissions == "view" || recordCreatorPermissions == "view&edit")
|
|
505
|
+
&& !(_.isEmpty(editContributorEmails) && _.isEmpty(viewContributorEmails));
|
|
506
|
+
if (useDefaultViewList) {
|
|
507
|
+
if (createdBy) {
|
|
508
|
+
auth.view = [createdBy];
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
auth.view = [];
|
|
512
|
+
}
|
|
513
|
+
auth.viewPending = viewContributorEmails;
|
|
514
|
+
}
|
|
515
|
+
// when both are empty, simpy return the record
|
|
516
|
+
if (_.isEmpty(editContributorEmails) && _.isEmpty(viewContributorEmails)) {
|
|
517
|
+
return (0, rxjs_1.of)(record);
|
|
518
|
+
}
|
|
519
|
+
_.each(editContributorEmails, (editorEmail) => {
|
|
520
|
+
editContributorObs.push(this.getObservable(User.findOne({
|
|
521
|
+
email: editorEmail.toLowerCase()
|
|
522
|
+
})));
|
|
523
|
+
});
|
|
524
|
+
_.each(viewContributorEmails, (viewerEmail) => {
|
|
525
|
+
viewContributorObs.push(this.getObservable(User.findOne({
|
|
526
|
+
email: viewerEmail.toLowerCase()
|
|
527
|
+
})));
|
|
528
|
+
});
|
|
529
|
+
if (editContributorObs.length === 0 && viewContributorObs.length === 0) {
|
|
530
|
+
return (0, rxjs_1.of)(record);
|
|
531
|
+
}
|
|
532
|
+
const normalizeResolvedUsers = (resolvedUsers) => {
|
|
533
|
+
if (_.isNil(resolvedUsers)) {
|
|
534
|
+
return [];
|
|
535
|
+
}
|
|
536
|
+
return _.isArray(resolvedUsers) ? resolvedUsers : [resolvedUsers];
|
|
537
|
+
};
|
|
538
|
+
let zippedViewContributorUsers;
|
|
539
|
+
if (editContributorObs.length == 0) {
|
|
540
|
+
const newEditList = [];
|
|
541
|
+
if (recordCreatorPermissions == "edit" || recordCreatorPermissions == "view&edit") {
|
|
542
|
+
if (hasContributors && createdBy) {
|
|
543
|
+
newEditList.push(createdBy);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
auth.edit = _.uniq(newEditList);
|
|
547
|
+
auth.editPending = editContributorEmails;
|
|
548
|
+
zippedViewContributorUsers = (0, rxjs_1.zip)(...viewContributorObs);
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
zippedViewContributorUsers = (0, rxjs_1.zip)(...editContributorObs)
|
|
552
|
+
.pipe((0, operators_1.mergeMap)((editContributorUsers) => {
|
|
553
|
+
return (0, rxjs_1.from)(Promise.all(normalizeResolvedUsers(editContributorUsers).map(async (editContributorUser) => {
|
|
554
|
+
if (_.isEmpty(editContributorUser)) {
|
|
555
|
+
return editContributorUser;
|
|
556
|
+
}
|
|
557
|
+
try {
|
|
558
|
+
const effectiveUser = await (0, rxjs_1.firstValueFrom)(UsersService.getEffectiveUser(editContributorUser));
|
|
559
|
+
return effectiveUser ?? editContributorUser;
|
|
560
|
+
}
|
|
561
|
+
catch (error) {
|
|
562
|
+
sails.log.verbose(`Failed to resolve effective user for edit contributor, using original:`, error);
|
|
563
|
+
return editContributorUser;
|
|
564
|
+
}
|
|
565
|
+
}))).pipe((0, operators_1.mergeMap)((effectiveEditUsers) => {
|
|
566
|
+
const newEditList = [];
|
|
567
|
+
this.filterPending(effectiveEditUsers, editContributorEmails, newEditList);
|
|
568
|
+
if (recordCreatorPermissions == "edit" || recordCreatorPermissions == "view&edit") {
|
|
569
|
+
const createdByUsername = createdBy;
|
|
570
|
+
if (createdByUsername && !newEditList.includes(createdByUsername)) {
|
|
571
|
+
newEditList.push(createdByUsername);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
auth.edit = _.uniq(newEditList);
|
|
575
|
+
auth.editPending = editContributorEmails;
|
|
576
|
+
if (viewContributorObs.length === 0) {
|
|
577
|
+
if (!useDefaultViewList) {
|
|
578
|
+
auth.view = [];
|
|
579
|
+
auth.viewPending = viewContributorEmails;
|
|
580
|
+
}
|
|
581
|
+
return (0, rxjs_1.of)({ __skipViewResolution: true });
|
|
582
|
+
}
|
|
583
|
+
return (0, rxjs_1.zip)(...viewContributorObs);
|
|
584
|
+
}));
|
|
585
|
+
}));
|
|
586
|
+
}
|
|
587
|
+
return zippedViewContributorUsers.pipe((0, operators_1.mergeMap)((viewContributorUsers) => {
|
|
588
|
+
if (_.isPlainObject(viewContributorUsers) && viewContributorUsers.__skipViewResolution === true) {
|
|
589
|
+
return (0, rxjs_1.of)(record);
|
|
590
|
+
}
|
|
591
|
+
if (useDefaultViewList) {
|
|
592
|
+
return (0, rxjs_1.of)(record);
|
|
593
|
+
}
|
|
594
|
+
return (0, rxjs_1.from)(Promise.all(normalizeResolvedUsers(viewContributorUsers).map(async (viewContributorUser) => {
|
|
595
|
+
if (_.isEmpty(viewContributorUser)) {
|
|
596
|
+
return viewContributorUser;
|
|
597
|
+
}
|
|
598
|
+
try {
|
|
599
|
+
const effectiveUser = await (0, rxjs_1.firstValueFrom)(UsersService.getEffectiveUser(viewContributorUser));
|
|
600
|
+
return effectiveUser ?? viewContributorUser;
|
|
601
|
+
}
|
|
602
|
+
catch (error) {
|
|
603
|
+
sails.log.verbose(`Failed to resolve effective user for view contributor, using original:`, error);
|
|
604
|
+
return viewContributorUser;
|
|
605
|
+
}
|
|
606
|
+
}))).pipe((0, operators_1.mergeMap)((viewUsers) => {
|
|
607
|
+
const newViewList = [];
|
|
608
|
+
this.filterPending(viewUsers, viewContributorEmails, newViewList);
|
|
609
|
+
if (recordCreatorPermissions == "view" || recordCreatorPermissions == "view&edit") {
|
|
610
|
+
const createdByUsername = createdBy;
|
|
611
|
+
if (createdByUsername && !newViewList.includes(createdByUsername)) {
|
|
612
|
+
newViewList.push(createdByUsername);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
auth.view = _.uniq(newViewList);
|
|
616
|
+
auth.viewPending = viewContributorEmails;
|
|
617
|
+
return (0, rxjs_1.of)(record);
|
|
618
|
+
}));
|
|
619
|
+
}));
|
|
620
|
+
}
|
|
621
|
+
stripUserBasedPermissions(oid, record, options, _user) {
|
|
622
|
+
const optionsObj = options;
|
|
623
|
+
const auth = (record.authorization ?? {});
|
|
624
|
+
record.authorization = auth;
|
|
625
|
+
if (this.metTriggerCondition(oid, record, optionsObj) === "true") {
|
|
626
|
+
let mode = optionsObj.permissionTypes;
|
|
627
|
+
if (mode == null) {
|
|
628
|
+
mode = "edit";
|
|
629
|
+
}
|
|
630
|
+
const stored = (auth.stored ?? {});
|
|
631
|
+
auth.stored = stored;
|
|
632
|
+
if (stored == undefined) {
|
|
633
|
+
auth.stored = {};
|
|
634
|
+
}
|
|
635
|
+
if (mode == "edit" || mode == "view&edit") {
|
|
636
|
+
stored.edit = (auth.edit ?? []).slice();
|
|
637
|
+
if (auth.editPending != undefined) {
|
|
638
|
+
stored.editPending = auth.editPending.slice();
|
|
639
|
+
}
|
|
640
|
+
auth.edit = [];
|
|
641
|
+
if (auth.editPending != undefined) {
|
|
642
|
+
auth.editPending = [];
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
if (mode == "view" || mode == "view&edit") {
|
|
646
|
+
if (auth.view != undefined) {
|
|
647
|
+
stored.view = auth.view.slice();
|
|
648
|
+
}
|
|
649
|
+
if (auth.viewPending != undefined) {
|
|
650
|
+
stored.viewPending = auth.viewPending.slice();
|
|
651
|
+
}
|
|
652
|
+
auth.view = [];
|
|
653
|
+
if (auth.viewPending != undefined) {
|
|
654
|
+
auth.viewPending = [];
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return (0, rxjs_1.of)(record);
|
|
659
|
+
}
|
|
660
|
+
restoreUserBasedPermissions(oid, record, options, _user) {
|
|
661
|
+
const auth = (record.authorization ?? {});
|
|
662
|
+
record.authorization = auth;
|
|
663
|
+
if (this.metTriggerCondition(oid, record, options) === "true") {
|
|
664
|
+
const stored = (auth.stored ?? {});
|
|
665
|
+
auth.stored = stored;
|
|
666
|
+
if (!_.isEmpty(stored)) {
|
|
667
|
+
if (stored.edit != undefined) {
|
|
668
|
+
auth.edit = _.map(stored.edit, _.clone);
|
|
669
|
+
}
|
|
670
|
+
if (stored.view != undefined) {
|
|
671
|
+
auth.view = _.map(stored.view, _.clone);
|
|
672
|
+
}
|
|
673
|
+
if (stored.editPending != undefined) {
|
|
674
|
+
auth.editPending = _.map(stored.editPending, _.clone);
|
|
675
|
+
}
|
|
676
|
+
if (stored.viewPending != undefined) {
|
|
677
|
+
auth.viewPending = _.map(stored.viewPending, _.clone);
|
|
678
|
+
}
|
|
679
|
+
delete auth.stored;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
return (0, rxjs_1.of)(record);
|
|
683
|
+
}
|
|
684
|
+
runTemplates(oid, record, options, user, _response = null) {
|
|
685
|
+
sails.log.verbose(`runTemplates config:`);
|
|
686
|
+
sails.log.verbose(JSON.stringify(options.templates));
|
|
687
|
+
sails.log.verbose(`runTemplates oid: ${oid} with user: ${JSON.stringify(user)}`);
|
|
688
|
+
sails.log.verbose(JSON.stringify(record));
|
|
689
|
+
const optionsObj = options;
|
|
690
|
+
const parseObject = _.get(optionsObj, 'parseObject', false);
|
|
691
|
+
let tmplConfig = null;
|
|
692
|
+
try {
|
|
693
|
+
const templates = (optionsObj.templates ?? []);
|
|
694
|
+
_.each(templates, (templateConfig) => {
|
|
695
|
+
const templateConfigObj = templateConfig;
|
|
696
|
+
tmplConfig = templateConfigObj;
|
|
697
|
+
const imports = _.extend({
|
|
698
|
+
moment: momentShim_1.momentShim,
|
|
699
|
+
numeral: numeral_1.default
|
|
700
|
+
}, this);
|
|
701
|
+
const templateImportsData = {
|
|
702
|
+
imports: imports
|
|
703
|
+
};
|
|
704
|
+
const templateData = {
|
|
705
|
+
oid: oid,
|
|
706
|
+
record: record,
|
|
707
|
+
user: user,
|
|
708
|
+
options: options
|
|
709
|
+
};
|
|
710
|
+
if (_.isString(templateConfigObj.template)) {
|
|
711
|
+
const compiledTemplate = _.template(templateConfigObj.template, templateImportsData);
|
|
712
|
+
templateConfigObj.template = compiledTemplate;
|
|
713
|
+
}
|
|
714
|
+
const data = templateConfigObj.template(templateData);
|
|
715
|
+
if (parseObject) {
|
|
716
|
+
const obj = JSON.parse(data);
|
|
717
|
+
_.set(record, templateConfigObj.field, obj);
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
_.set(record, templateConfigObj.field, data);
|
|
721
|
+
}
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
catch (e) {
|
|
725
|
+
const errLog = `Failed to run one of the string templates: ${JSON.stringify(tmplConfig)}`;
|
|
726
|
+
sails.log.error(errLog);
|
|
727
|
+
sails.log.error(e);
|
|
728
|
+
return (0, rxjs_1.throwError)(new Error(errLog));
|
|
729
|
+
}
|
|
730
|
+
return (0, rxjs_1.of)(record);
|
|
731
|
+
}
|
|
732
|
+
async addWorkspaceToRecord(oid, workspaceData, options, user, response) {
|
|
733
|
+
const optionsObj = options;
|
|
734
|
+
const workspaceObj = workspaceData;
|
|
735
|
+
const workspaceMetadata = (workspaceObj.metadata ?? {});
|
|
736
|
+
const rdmpOidField = _.get(optionsObj, 'rdmpOidField', 'rdmpOid');
|
|
737
|
+
const rdmpOid = _.get(workspaceMetadata, rdmpOidField, null);
|
|
738
|
+
sails.log.verbose(`Generic adding workspace ${oid} to record: ${rdmpOid}`);
|
|
739
|
+
if (_.isEmpty(rdmpOid)) {
|
|
740
|
+
sails.log.error(`No RDMP OID found in workspace data: ${JSON.stringify(workspaceData)}`);
|
|
741
|
+
return workspaceData;
|
|
742
|
+
}
|
|
743
|
+
await WorkspaceService.addWorkspaceToRecord(workspaceMetadata.rdmpOid, oid);
|
|
744
|
+
_.set(response, 'workspaceOid', oid);
|
|
745
|
+
_.set(response, 'workspaceData', workspaceData);
|
|
746
|
+
return workspaceData;
|
|
747
|
+
}
|
|
748
|
+
async removeWorkspaceFromRecord(oid, workspaceData, options, user, response) {
|
|
749
|
+
const optionsObj = options;
|
|
750
|
+
const workspaceObj = workspaceData;
|
|
751
|
+
const workspaceMetadata = (workspaceObj.metadata ?? {});
|
|
752
|
+
const rdmpOidField = _.get(optionsObj, 'rdmpOidField', 'rdmpOid');
|
|
753
|
+
const rdmpOid = _.get(workspaceMetadata, rdmpOidField, null);
|
|
754
|
+
sails.log.verbose(`Generic removing workspace ${oid} from record: ${rdmpOid}`);
|
|
755
|
+
if (_.isEmpty(rdmpOid)) {
|
|
756
|
+
sails.log.error(`No RDMP OID found in workspace data: ${JSON.stringify(workspaceData)}`);
|
|
757
|
+
return workspaceData;
|
|
758
|
+
}
|
|
759
|
+
await WorkspaceService.removeWorkspaceFromRecord(rdmpOid, oid);
|
|
760
|
+
_.set(response, 'workspaceOid', oid);
|
|
761
|
+
_.set(response, 'workspaceData', workspaceData);
|
|
762
|
+
return workspaceData;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
Services.RDMPS = RDMPS;
|
|
766
|
+
})(Services || (exports.Services = Services = {}));
|
|
767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkRNUFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvUkRNUFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBGQUEwRjtBQUMxRixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7QUFFOUQsK0JBQTRHO0FBQzVHLDhDQUFxRDtBQUNyRCxnREFBc0Q7QUFFdEQsa0VBQStEO0FBRS9ELG9EQUEyRDtBQUMzRCxzREFBOEI7QUFFOUIsd0NBQXdDO0FBR3hDLElBQWlCLFFBQVEsQ0F1eUJ4QjtBQXZ5QkQsV0FBaUIsUUFBUTtJQWV2Qjs7Ozs7T0FLRztJQUNILE1BQWEsS0FBTSxTQUFRLHNCQUFRLENBQUMsSUFBSSxDQUFDLE9BQU87UUFFcEMsWUFBWSxDQUFnQjtRQUVuQixnQkFBZ0IsR0FBYTtZQUM5QyxtQkFBbUI7WUFDbkIsMEJBQTBCO1lBQzFCLHVCQUF1QjtZQUN2QiwyQkFBMkI7WUFDM0IsNkJBQTZCO1lBQzdCLGNBQWM7WUFDZCxzQkFBc0I7WUFDdEIsa0NBQWtDO1lBQ2xDLGtCQUFrQjtZQUNsQiwrQkFBK0I7WUFDL0IsMkJBQTJCO1lBQzNCLE1BQU07U0FDUCxDQUFDO1FBRUY7WUFDRSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUM7UUFDdEMsQ0FBQztRQUVlLElBQUk7WUFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxF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
|