@researchdatabox/redbox-core 5.0.4-beta.12498 → 5.0.4
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 +3 -7
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +3 -85
- package/dist/DatastreamService.d.ts +2 -4
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/HarvestRunService.d.ts +3 -4
- package/dist/HarvestRunService.d.ts.map +1 -1
- package/dist/HarvestRunService.js +1 -1
- package/dist/QueueService.d.ts +1 -1
- package/dist/QueueService.d.ts.map +1 -1
- package/dist/RecordWriteOptions.d.ts +21 -0
- package/dist/RecordWriteOptions.d.ts.map +1 -0
- package/dist/RecordWriteOptions.js +17 -0
- package/dist/RecordsService.d.ts +14 -105
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/RecordsService.js +1 -44
- package/dist/SearchService.d.ts +1 -2
- package/dist/SearchService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +20 -48
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/StorageService.js +1 -19
- package/dist/StorageServiceResponse.d.ts +1 -22
- package/dist/StorageServiceResponse.d.ts.map +1 -1
- package/dist/StorageServiceResponse.js +4 -22
- package/dist/api-routes/groups/branding.d.ts +0 -8
- package/dist/api-routes/groups/branding.d.ts.map +1 -1
- package/dist/api-routes/groups/branding.js +11 -86
- package/dist/api-routes/groups/dashboard-config.d.ts +9 -12
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -1
- package/dist/api-routes/groups/dashboard-config.js +73 -136
- package/dist/api-routes/groups/forms.d.ts.map +1 -1
- package/dist/api-routes/groups/forms.js +2 -10
- package/dist/api-routes/groups/records.d.ts +0 -1
- package/dist/api-routes/groups/records.d.ts.map +1 -1
- package/dist/api-routes/groups/records.js +26 -141
- package/dist/api-routes/index.d.ts +0 -3
- package/dist/api-routes/index.d.ts.map +1 -1
- package/dist/api-routes/index.js +1 -4
- package/dist/api-routes/openapi.d.ts.map +1 -1
- package/dist/api-routes/openapi.js +5 -7
- package/dist/api-routes/request-extraction.d.ts.map +1 -1
- package/dist/api-routes/request-extraction.js +8 -10
- package/dist/api-routes/route-factory.d.ts.map +1 -1
- package/dist/api-routes/route-factory.js +1 -2
- package/dist/api-routes/route-registry.d.ts.map +1 -1
- package/dist/api-routes/route-registry.js +1 -3
- package/dist/api-routes/schemas/common.d.ts +0 -36
- package/dist/api-routes/schemas/common.d.ts.map +1 -1
- package/dist/api-routes/schemas/common.js +5 -95
- package/dist/api-routes/schemas/responses.d.ts +1 -1424
- package/dist/api-routes/schemas/responses.d.ts.map +1 -1
- package/dist/api-routes/schemas/responses.js +60 -382
- package/dist/api-routes/types.d.ts +0 -1
- package/dist/api-routes/types.d.ts.map +1 -1
- package/dist/api-routes/validation.d.ts +1 -5
- package/dist/api-routes/validation.d.ts.map +1 -1
- package/dist/api-routes/validation.js +15 -14
- package/dist/bootstrap.d.ts +1 -3
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +41 -58
- package/dist/config/agendaQueue.config.d.ts +0 -3
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +11 -29
- package/dist/config/branding.config.d.ts +0 -13
- package/dist/config/branding.config.d.ts.map +1 -1
- package/dist/config/branding.config.js +2 -34
- package/dist/config/brandingConfigurationDefaults.config.d.ts +0 -4
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +3 -42
- 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/i18n.config.d.ts +4 -0
- package/dist/config/i18n.config.d.ts.map +1 -1
- package/dist/config/i18n.config.js +1 -1
- package/dist/config/index.d.ts +4 -12
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -7
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +23 -37
- package/dist/config/raid.config.d.ts +4 -7
- package/dist/config/raid.config.d.ts.map +1 -1
- package/dist/config/raid.config.js +35 -21
- package/dist/config/record.config.d.ts +0 -3
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +35 -37
- package/dist/config/recordtype.config.d.ts +9 -32
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +7 -4
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +53 -135
- package/dist/config/workflow.config.d.ts +0 -6
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -1
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +2 -4
- package/dist/configmodels/ConfigModels.d.ts +1 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +9 -26
- package/dist/configmodels/FigsharePublishing.d.ts +103 -0
- package/dist/configmodels/FigsharePublishing.d.ts.map +1 -1
- package/dist/configmodels/FigsharePublishing.js +36 -2
- package/dist/controllers/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/AppConfigController.js +1 -4
- package/dist/controllers/BrandingAppController.d.ts +7 -29
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +69 -265
- package/dist/controllers/BrandingController.d.ts +1 -24
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +43 -173
- package/dist/controllers/DashboardConfigController.d.ts +2 -6
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/DashboardConfigController.js +4 -18
- package/dist/controllers/DynamicAssetController.d.ts +5 -7
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +12 -21
- package/dist/controllers/RecordAuditController.d.ts.map +1 -1
- package/dist/controllers/RecordAuditController.js +24 -6
- package/dist/controllers/RecordController.d.ts +4 -45
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +345 -778
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +1 -4
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +3 -4
- package/dist/controllers/webservice/BrandingController.d.ts +1 -26
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +116 -292
- package/dist/controllers/webservice/DashboardConfigController.d.ts +17 -25
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/DashboardConfigController.js +205 -90
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +3 -37
- package/dist/controllers/webservice/RecordController.d.ts +1 -15
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +267 -647
- package/dist/controllers/webservice/RecordTypeController.d.ts +1 -6
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +3 -21
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +3 -7
- package/dist/hooks/defineRedboxHook.d.ts +0 -3
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
- package/dist/hooks/defineRedboxHook.js +1 -4
- package/dist/index.d.ts +25 -50
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -90
- package/dist/loader/bootstrapShimRuntime.d.ts +1 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +12 -20
- package/dist/loader/index.d.ts +0 -9
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +4 -93
- package/dist/model/BuildResponse.d.ts +11 -25
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/BuildResponse.js +3 -4
- package/dist/model/DashboardTypeResponseModel.d.ts +0 -6
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +1 -7
- package/dist/model/DashboardViewResponseModel.d.ts +1 -5
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardViewResponseModel.js +3 -6
- package/dist/model/RBValidationError.d.ts +0 -17
- package/dist/model/RBValidationError.d.ts.map +1 -1
- package/dist/model/RBValidationError.js +1 -37
- package/dist/model/RecordTypeResponseModel.d.ts +4 -12
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +2 -11
- package/dist/model/index.d.ts +1 -5
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +2 -5
- package/dist/model/storage/BrandingModel.d.ts +0 -7
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +1 -7
- package/dist/model/storage/DeletedRecordModel.d.ts +0 -35
- package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -1
- package/dist/model/storage/DeletedRecordModel.js +1 -62
- package/dist/model/storage/FigshareSyncModel.d.ts +126 -0
- package/dist/model/storage/FigshareSyncModel.d.ts.map +1 -0
- package/dist/model/storage/FigshareSyncModel.js +3 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts +2 -16
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
- package/dist/model/storage/IntegrationAuditModel.js +1 -15
- package/dist/model/storage/RecordAuditModel.d.ts +4 -11
- package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
- package/dist/model/storage/RecordAuditModel.js +30 -8
- package/dist/model/storage/RecordModel.d.ts +3 -6
- package/dist/model/storage/RecordModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.d.ts +0 -6
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +1 -4
- package/dist/model/storage/index.d.ts +10 -12
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +2 -24
- package/dist/policies/checkAuth.d.ts +6 -2
- package/dist/policies/checkAuth.d.ts.map +1 -1
- package/dist/policies/checkAuth.js +9 -32
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +2 -85
- package/dist/policies/index.d.ts +2 -3
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +2 -4
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -1
- package/dist/policies/validateApiContractRequest.js +11 -49
- package/dist/services/AgendaQueueService.d.ts +1 -1
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +7 -4
- package/dist/services/AppConfigService.d.ts +0 -6
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +1 -23
- package/dist/services/AttachmentMetadataService.d.ts +0 -58
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -1
- package/dist/services/AttachmentMetadataService.js +8 -643
- package/dist/services/BrandingLogoService.d.ts +1 -6
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +9 -77
- package/dist/services/BrandingService.d.ts +9 -171
- package/dist/services/BrandingService.d.ts.map +1 -1
- package/dist/services/BrandingService.js +68 -572
- package/dist/services/BrandingThemeCssService.d.ts +1 -17
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
- package/dist/services/BrandingThemeCssService.js +9 -71
- package/dist/services/DashboardConfigService.d.ts +54 -214
- package/dist/services/DashboardConfigService.d.ts.map +1 -1
- package/dist/services/DashboardConfigService.js +261 -829
- package/dist/services/DashboardTypesService.d.ts +4 -15
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +139 -72
- package/dist/services/DoiService.d.ts +1 -1
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +45 -71
- package/dist/services/FigshareService.d.ts +15 -10
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +82 -583
- package/dist/services/FormRecordConsistencyService.d.ts +23 -8
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +70 -54
- package/dist/services/FormsService.d.ts +2 -91
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +64 -324
- package/dist/services/HarvestRunService.d.ts +3 -6
- package/dist/services/HarvestRunService.d.ts.map +1 -1
- package/dist/services/HarvestRunService.js +97 -161
- package/dist/services/I18nEntriesService.d.ts +2 -1
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +45 -30
- package/dist/services/OniService.d.ts +62 -19
- package/dist/services/OniService.d.ts.map +1 -1
- package/dist/services/OniService.js +691 -223
- package/dist/services/RDMPService.d.ts +1 -1
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +5 -5
- package/dist/services/RaidService.d.ts +61 -19
- package/dist/services/RaidService.d.ts.map +1 -1
- package/dist/services/RaidService.js +530 -191
- package/dist/services/RecordTypesService.d.ts +0 -29
- package/dist/services/RecordTypesService.d.ts.map +1 -1
- package/dist/services/RecordTypesService.js +11 -106
- package/dist/services/RecordsService.d.ts +26 -313
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +763 -5089
- package/dist/services/SolrSearchService.d.ts +1 -1
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +12 -42
- package/dist/services/StandardDatastreamService.d.ts +5 -4
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +61 -106
- package/dist/services/TriggerService.d.ts.map +1 -1
- package/dist/services/TriggerService.js +30 -54
- package/dist/services/UsersService.d.ts +1 -2
- package/dist/services/UsersService.d.ts.map +1 -1
- package/dist/services/UsersService.js +283 -364
- package/dist/services/VocabularyService.d.ts +0 -2
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +2 -61
- package/dist/services/WorkflowStepsService.d.ts +0 -11
- package/dist/services/WorkflowStepsService.d.ts.map +1 -1
- package/dist/services/WorkflowStepsService.js +3 -32
- package/dist/services/WorkspaceService.d.ts +2 -2
- package/dist/services/WorkspaceService.d.ts.map +1 -1
- package/dist/services/WorkspaceService.js +5 -5
- package/dist/services/doi-v2/bindings.d.ts.map +1 -1
- package/dist/services/doi-v2/bindings.js +20 -3
- package/dist/services/doi-v2/config.d.ts +0 -1
- package/dist/services/doi-v2/config.d.ts.map +1 -1
- package/dist/services/doi-v2/config.js +5 -13
- package/dist/services/doi-v2/runtime.d.ts.map +1 -1
- package/dist/services/doi-v2/runtime.js +54 -14
- package/dist/services/figshare-v2/admin.d.ts +16 -0
- package/dist/services/figshare-v2/admin.d.ts.map +1 -0
- package/dist/services/figshare-v2/admin.js +283 -0
- package/dist/services/figshare-v2/assets.d.ts +20 -1
- package/dist/services/figshare-v2/assets.d.ts.map +1 -1
- package/dist/services/figshare-v2/assets.js +16 -1
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
- package/dist/services/figshare-v2/bindings.js +20 -3
- package/dist/services/figshare-v2/config.d.ts +8 -2
- package/dist/services/figshare-v2/config.d.ts.map +1 -1
- package/dist/services/figshare-v2/config.js +31 -3
- package/dist/services/figshare-v2/execution.d.ts +25 -0
- package/dist/services/figshare-v2/execution.d.ts.map +1 -0
- package/dist/services/figshare-v2/execution.js +49 -0
- package/dist/services/figshare-v2/http.d.ts +6 -1
- package/dist/services/figshare-v2/http.d.ts.map +1 -1
- package/dist/services/figshare-v2/http.js +69 -12
- package/dist/services/figshare-v2/identity.d.ts +12 -0
- package/dist/services/figshare-v2/identity.d.ts.map +1 -0
- package/dist/services/figshare-v2/identity.js +78 -0
- package/dist/services/figshare-v2/managed-assets.d.ts +9 -0
- package/dist/services/figshare-v2/managed-assets.d.ts.map +1 -0
- package/dist/services/figshare-v2/managed-assets.js +229 -0
- package/dist/services/figshare-v2/plan.d.ts.map +1 -1
- package/dist/services/figshare-v2/plan.js +2 -9
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +58 -11
- package/dist/services/figshare-v2/source-intent.d.ts +9 -0
- package/dist/services/figshare-v2/source-intent.d.ts.map +1 -0
- package/dist/services/figshare-v2/source-intent.js +93 -0
- package/dist/services/figshare-v2/status.d.ts +4 -0
- package/dist/services/figshare-v2/status.d.ts.map +1 -0
- package/dist/services/figshare-v2/status.js +29 -0
- package/dist/services/figshare-v2/sync-store.d.ts +27 -0
- package/dist/services/figshare-v2/sync-store.d.ts.map +1 -0
- package/dist/services/figshare-v2/sync-store.js +139 -0
- package/dist/services/figshare-v2/types.d.ts +3 -0
- package/dist/services/figshare-v2/types.d.ts.map +1 -1
- package/dist/services/figshare-v2/types.js +1 -1
- package/dist/services/figshare-v2/worker.d.ts +16 -0
- package/dist/services/figshare-v2/worker.d.ts.map +1 -0
- package/dist/services/figshare-v2/worker.js +572 -0
- package/dist/services/index.d.ts +0 -9
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -45
- package/dist/utilities/TranslationHtml.d.ts +3 -0
- package/dist/utilities/TranslationHtml.d.ts.map +1 -0
- package/dist/utilities/TranslationHtml.js +46 -0
- package/dist/visitor/client.visitor.d.ts +0 -6
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +14 -59
- package/dist/visitor/construct.visitor.d.ts +1 -27
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +177 -265
- package/dist/visitor/context-variables.visitor.d.ts +1 -3
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +1 -15
- package/dist/visitor/data-value.visitor.d.ts +0 -6
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +1 -10
- package/dist/visitor/json-type-def.visitor.d.ts +0 -6
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +1 -10
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +0 -11
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +133 -228
- package/dist/visitor/template.visitor.d.ts +2 -17
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +22 -60
- package/dist/visitor/validator.visitor.d.ts +7 -49
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +178 -275
- package/dist/waterline-models/AttachmentMetadata.d.ts +0 -22
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -1
- package/dist/waterline-models/AttachmentMetadata.js +3 -147
- package/dist/waterline-models/BrandingConfig.d.ts +0 -7
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +1 -16
- package/dist/waterline-models/BrandingConfigHistory.d.ts +2 -11
- package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfigHistory.js +1 -21
- package/dist/waterline-models/FigshareSync.d.ts +41 -0
- package/dist/waterline-models/FigshareSync.d.ts.map +1 -0
- package/dist/waterline-models/FigshareSync.js +168 -0
- package/dist/waterline-models/RecordType.d.ts +0 -9
- package/dist/waterline-models/RecordType.d.ts.map +1 -1
- package/dist/waterline-models/RecordType.js +1 -16
- package/dist/waterline-models/User.d.ts.map +1 -1
- package/dist/waterline-models/User.js +15 -10
- package/dist/waterline-models/index.d.ts +2 -2
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +4 -4
- package/package.json +46 -59
- package/dist/AttachmentStagingIdentity.d.ts +0 -3
- package/dist/AttachmentStagingIdentity.d.ts.map +0 -1
- package/dist/AttachmentStagingIdentity.js +0 -10
- package/dist/RecordConcurrencyObservability.d.ts +0 -51
- package/dist/RecordConcurrencyObservability.d.ts.map +0 -1
- package/dist/RecordConcurrencyObservability.js +0 -136
- package/dist/RecordEntityTag.d.ts +0 -31
- package/dist/RecordEntityTag.d.ts.map +0 -1
- package/dist/RecordEntityTag.js +0 -101
- package/dist/RecordFormFingerprint.d.ts +0 -7
- package/dist/RecordFormFingerprint.d.ts.map +0 -1
- package/dist/RecordFormFingerprint.js +0 -106
- package/dist/RecordHttpConcurrency.d.ts +0 -60
- package/dist/RecordHttpConcurrency.d.ts.map +0 -1
- package/dist/RecordHttpConcurrency.js +0 -181
- package/dist/RecordSaveResponse.d.ts +0 -219
- package/dist/RecordSaveResponse.d.ts.map +0 -1
- package/dist/RecordSaveResponse.js +0 -639
- package/dist/RecordStorageConcurrency.d.ts +0 -48
- package/dist/RecordStorageConcurrency.d.ts.map +0 -1
- package/dist/RecordStorageConcurrency.js +0 -103
- package/dist/RecordWriteClassification.d.ts +0 -12
- package/dist/RecordWriteClassification.d.ts.map +0 -1
- package/dist/RecordWriteClassification.js +0 -70
- package/dist/action-execution/audit.d.ts +0 -41
- package/dist/action-execution/audit.d.ts.map +0 -1
- package/dist/action-execution/audit.js +0 -122
- package/dist/action-execution/executor.d.ts +0 -24
- package/dist/action-execution/executor.d.ts.map +0 -1
- package/dist/action-execution/executor.js +0 -435
- package/dist/action-execution/failure.d.ts +0 -49
- package/dist/action-execution/failure.d.ts.map +0 -1
- package/dist/action-execution/failure.js +0 -129
- package/dist/action-execution/index.d.ts +0 -7
- package/dist/action-execution/index.d.ts.map +0 -1
- package/dist/action-execution/index.js +0 -23
- package/dist/action-execution/legacy-result.d.ts +0 -21
- package/dist/action-execution/legacy-result.d.ts.map +0 -1
- package/dist/action-execution/legacy-result.js +0 -70
- package/dist/action-execution/policy.d.ts +0 -12
- package/dist/action-execution/policy.d.ts.map +0 -1
- package/dist/action-execution/policy.js +0 -138
- package/dist/action-execution/types.d.ts +0 -121
- package/dist/action-execution/types.d.ts.map +0 -1
- package/dist/action-execution/types.js +0 -22
- package/dist/api-routes/groups/record-schemas.d.ts +0 -5
- package/dist/api-routes/groups/record-schemas.d.ts.map +0 -1
- package/dist/api-routes/groups/record-schemas.js +0 -181
- package/dist/api-routes/record-schema-openapi.d.ts +0 -26
- package/dist/api-routes/record-schema-openapi.d.ts.map +0 -1
- package/dist/api-routes/record-schema-openapi.js +0 -38
- package/dist/api-routes/record-schema-response.d.ts +0 -40
- package/dist/api-routes/record-schema-response.d.ts.map +0 -1
- package/dist/api-routes/record-schema-response.js +0 -89
- package/dist/config/recordSchema.config.d.ts +0 -68
- package/dist/config/recordSchema.config.d.ts.map +0 -1
- package/dist/config/recordSchema.config.js +0 -173
- package/dist/config/recordValidation.config.d.ts +0 -19
- package/dist/config/recordValidation.config.d.ts.map +0 -1
- package/dist/config/recordValidation.config.js +0 -10
- package/dist/configmodels/DashboardFieldCatalogue.d.ts +0 -67
- package/dist/configmodels/DashboardFieldCatalogue.d.ts.map +0 -1
- package/dist/configmodels/DashboardFieldCatalogue.js +0 -174
- package/dist/configmodels/DashboardSettings.d.ts +0 -191
- package/dist/configmodels/DashboardSettings.d.ts.map +0 -1
- package/dist/configmodels/DashboardSettings.js +0 -705
- package/dist/configmodels/OniPublishing.d.ts +0 -205
- package/dist/configmodels/OniPublishing.d.ts.map +0 -1
- package/dist/configmodels/OniPublishing.js +0 -335
- package/dist/configmodels/RaidPublishing.d.ts +0 -97
- package/dist/configmodels/RaidPublishing.d.ts.map +0 -1
- package/dist/configmodels/RaidPublishing.js +0 -35
- package/dist/configmodels/WebAnalytics.d.ts +0 -55
- package/dist/configmodels/WebAnalytics.d.ts.map +0 -1
- package/dist/configmodels/WebAnalytics.js +0 -61
- package/dist/controllers/BrandingControllerSupport.d.ts +0 -20
- package/dist/controllers/BrandingControllerSupport.d.ts.map +0 -1
- package/dist/controllers/BrandingControllerSupport.js +0 -80
- package/dist/controllers/webservice/RecordSchemaController.d.ts +0 -32
- package/dist/controllers/webservice/RecordSchemaController.d.ts.map +0 -1
- package/dist/controllers/webservice/RecordSchemaController.js +0 -356
- package/dist/model/BrandingTypeface.d.ts +0 -70
- package/dist/model/BrandingTypeface.d.ts.map +0 -1
- package/dist/model/BrandingTypeface.js +0 -116
- package/dist/model/record-contract.d.ts +0 -42
- package/dist/model/record-contract.d.ts.map +0 -1
- package/dist/model/record-contract.js +0 -3
- package/dist/model/storage/record-schema.d.ts +0 -115
- package/dist/model/storage/record-schema.d.ts.map +0 -1
- package/dist/model/storage/record-schema.js +0 -3
- package/dist/record-contract/ajv-error-mapper.d.ts +0 -34
- package/dist/record-contract/ajv-error-mapper.d.ts.map +0 -1
- package/dist/record-contract/ajv-error-mapper.js +0 -153
- package/dist/record-contract/canonical-json.d.ts +0 -20
- package/dist/record-contract/canonical-json.d.ts.map +0 -1
- package/dist/record-contract/canonical-json.js +0 -126
- package/dist/record-contract/codes.d.ts +0 -36
- package/dist/record-contract/codes.d.ts.map +0 -1
- package/dist/record-contract/codes.js +0 -38
- package/dist/record-contract/contributor-registry.d.ts +0 -76
- package/dist/record-contract/contributor-registry.d.ts.map +0 -1
- package/dist/record-contract/contributor-registry.js +0 -126
- package/dist/record-contract/core-contributors.d.ts +0 -44
- package/dist/record-contract/core-contributors.d.ts.map +0 -1
- package/dist/record-contract/core-contributors.js +0 -395
- package/dist/record-contract/deep-freeze.d.ts +0 -3
- package/dist/record-contract/deep-freeze.d.ts.map +0 -1
- package/dist/record-contract/deep-freeze.js +0 -23
- package/dist/record-contract/index.d.ts +0 -13
- package/dist/record-contract/index.d.ts.map +0 -1
- package/dist/record-contract/index.js +0 -29
- package/dist/record-contract/json-pointer.d.ts +0 -20
- package/dist/record-contract/json-pointer.d.ts.map +0 -1
- package/dist/record-contract/json-pointer.js +0 -70
- package/dist/record-contract/json-schema-renderer.d.ts +0 -51
- package/dist/record-contract/json-schema-renderer.d.ts.map +0 -1
- package/dist/record-contract/json-schema-renderer.js +0 -450
- package/dist/record-contract/record-contract-compiler.d.ts +0 -42
- package/dist/record-contract/record-contract-compiler.d.ts.map +0 -1
- package/dist/record-contract/record-contract-compiler.js +0 -775
- package/dist/record-contract/record-contract-context.d.ts +0 -91
- package/dist/record-contract/record-contract-context.d.ts.map +0 -1
- package/dist/record-contract/record-contract-context.js +0 -39
- package/dist/record-contract/record-json-schema-artifact.d.ts +0 -74
- package/dist/record-contract/record-json-schema-artifact.d.ts.map +0 -1
- package/dist/record-contract/record-json-schema-artifact.js +0 -309
- package/dist/record-contract/record-json-schema-etag.d.ts +0 -15
- package/dist/record-contract/record-json-schema-etag.d.ts.map +0 -1
- package/dist/record-contract/record-json-schema-etag.js +0 -41
- package/dist/record-contract/types.d.ts +0 -151
- package/dist/record-contract/types.d.ts.map +0 -1
- package/dist/record-contract/types.js +0 -6
- package/dist/services/BrandingTypefaceService.d.ts +0 -74
- package/dist/services/BrandingTypefaceService.d.ts.map +0 -1
- package/dist/services/BrandingTypefaceService.js +0 -359
- package/dist/services/BrandingWoff2Inspector.d.ts +0 -17
- package/dist/services/BrandingWoff2Inspector.d.ts.map +0 -1
- package/dist/services/BrandingWoff2Inspector.js +0 -402
- package/dist/services/DashboardLegacyConversion.d.ts +0 -82
- package/dist/services/DashboardLegacyConversion.d.ts.map +0 -1
- package/dist/services/DashboardLegacyConversion.js +0 -427
- package/dist/services/RecordSchemaService.d.ts +0 -440
- package/dist/services/RecordSchemaService.d.ts.map +0 -1
- package/dist/services/RecordSchemaService.js +0 -3061
- package/dist/services/RecordValidationService.d.ts +0 -340
- package/dist/services/RecordValidationService.d.ts.map +0 -1
- package/dist/services/RecordValidationService.js +0 -1898
- package/dist/services/form-record-access-user.d.ts +0 -3
- package/dist/services/form-record-access-user.d.ts.map +0 -1
- package/dist/services/form-record-access-user.js +0 -23
- package/dist/services/integration-v2/bindings.d.ts +0 -3
- package/dist/services/integration-v2/bindings.d.ts.map +0 -1
- package/dist/services/integration-v2/bindings.js +0 -91
- package/dist/services/integration-v2/runtime.d.ts +0 -3
- package/dist/services/integration-v2/runtime.d.ts.map +0 -1
- package/dist/services/integration-v2/runtime.js +0 -50
- package/dist/services/internal-record-schema-authorization.d.ts +0 -8
- package/dist/services/internal-record-schema-authorization.d.ts.map +0 -1
- package/dist/services/internal-record-schema-authorization.js +0 -16
- package/dist/services/oni-v2/audit.d.ts +0 -19
- package/dist/services/oni-v2/audit.d.ts.map +0 -1
- package/dist/services/oni-v2/audit.js +0 -50
- package/dist/services/oni-v2/bindings.d.ts +0 -7
- package/dist/services/oni-v2/bindings.d.ts.map +0 -1
- package/dist/services/oni-v2/bindings.js +0 -31
- package/dist/services/oni-v2/config.d.ts +0 -12
- package/dist/services/oni-v2/config.d.ts.map +0 -1
- package/dist/services/oni-v2/config.js +0 -134
- package/dist/services/oni-v2/context.d.ts +0 -3
- package/dist/services/oni-v2/context.d.ts.map +0 -1
- package/dist/services/oni-v2/context.js +0 -17
- package/dist/services/oni-v2/crate.d.ts +0 -17
- package/dist/services/oni-v2/crate.d.ts.map +0 -1
- package/dist/services/oni-v2/crate.js +0 -504
- package/dist/services/oni-v2/flydriveOcflStore.d.ts +0 -69
- package/dist/services/oni-v2/flydriveOcflStore.d.ts.map +0 -1
- package/dist/services/oni-v2/flydriveOcflStore.js +0 -325
- package/dist/services/oni-v2/ingestion.d.ts +0 -37
- package/dist/services/oni-v2/ingestion.d.ts.map +0 -1
- package/dist/services/oni-v2/ingestion.js +0 -91
- package/dist/services/oni-v2/mapping.d.ts +0 -17
- package/dist/services/oni-v2/mapping.d.ts.map +0 -1
- package/dist/services/oni-v2/mapping.js +0 -137
- package/dist/services/oni-v2/repository.d.ts +0 -9
- package/dist/services/oni-v2/repository.d.ts.map +0 -1
- package/dist/services/oni-v2/repository.js +0 -180
- package/dist/services/oni-v2/runtime.d.ts +0 -23
- package/dist/services/oni-v2/runtime.d.ts.map +0 -1
- package/dist/services/oni-v2/runtime.js +0 -121
- package/dist/services/oni-v2/templating.d.ts +0 -11
- package/dist/services/oni-v2/templating.d.ts.map +0 -1
- package/dist/services/oni-v2/templating.js +0 -27
- package/dist/services/oni-v2/types.d.ts +0 -100
- package/dist/services/oni-v2/types.d.ts.map +0 -1
- package/dist/services/oni-v2/types.js +0 -3
- package/dist/services/raid-v2/audit.d.ts +0 -10
- package/dist/services/raid-v2/audit.d.ts.map +0 -1
- package/dist/services/raid-v2/audit.js +0 -29
- package/dist/services/raid-v2/errors.d.ts +0 -85
- package/dist/services/raid-v2/errors.d.ts.map +0 -1
- package/dist/services/raid-v2/errors.js +0 -36
- package/dist/services/raid-v2/http.d.ts +0 -4
- package/dist/services/raid-v2/http.d.ts.map +0 -1
- package/dist/services/raid-v2/http.js +0 -84
- package/dist/services/raid-v2/logger.d.ts +0 -8
- package/dist/services/raid-v2/logger.d.ts.map +0 -1
- package/dist/services/raid-v2/logger.js +0 -30
- package/dist/services/raid-v2/mapping.d.ts +0 -9
- package/dist/services/raid-v2/mapping.d.ts.map +0 -1
- package/dist/services/raid-v2/mapping.js +0 -168
- package/dist/services/raid-v2/runtime.d.ts +0 -5
- package/dist/services/raid-v2/runtime.d.ts.map +0 -1
- package/dist/services/raid-v2/runtime.js +0 -135
- package/dist/services/raid-v2/tags.d.ts +0 -11
- package/dist/services/raid-v2/tags.d.ts.map +0 -1
- package/dist/services/raid-v2/tags.js +0 -12
- package/dist/services/raid-v2/types.d.ts +0 -66
- package/dist/services/raid-v2/types.d.ts.map +0 -1
- package/dist/services/raid-v2/types.js +0 -3
- package/dist/services/record-hooks/coordinator.d.ts +0 -64
- package/dist/services/record-hooks/coordinator.d.ts.map +0 -1
- package/dist/services/record-hooks/coordinator.js +0 -276
- package/dist/visitor/related-object-data-inline.visitor.d.ts +0 -31
- package/dist/visitor/related-object-data-inline.visitor.d.ts.map +0 -1
- package/dist/visitor/related-object-data-inline.visitor.js +0 -96
- package/dist/waterline-models/DashboardConfiguration.d.ts +0 -29
- package/dist/waterline-models/DashboardConfiguration.d.ts.map +0 -1
- package/dist/waterline-models/DashboardConfiguration.js +0 -52
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Services = void 0;
|
|
4
|
+
const worker_1 = require("./figshare-v2/worker");
|
|
5
|
+
const execution_1 = require("./figshare-v2/execution");
|
|
6
|
+
const metadata_1 = require("./figshare-v2/metadata");
|
|
4
7
|
const CoreService_1 = require("../CoreService");
|
|
5
8
|
const config_1 = require("./figshare-v2/config");
|
|
6
9
|
const context_1 = require("./figshare-v2/context");
|
|
@@ -10,16 +13,9 @@ const assets_1 = require("./figshare-v2/assets");
|
|
|
10
13
|
const embargo_1 = require("./figshare-v2/embargo");
|
|
11
14
|
const publish_1 = require("./figshare-v2/publish");
|
|
12
15
|
const writeback_1 = require("./figshare-v2/writeback");
|
|
13
|
-
const audit_1 = require("./figshare-v2/audit");
|
|
14
16
|
const runtime_1 = require("./figshare-v2/runtime");
|
|
15
|
-
const queue_1 = require("./figshare-v2/queue");
|
|
16
|
-
const workflow_1 = require("./figshare-v2/workflow");
|
|
17
17
|
const http_1 = require("./figshare-v2/http");
|
|
18
18
|
const RBValidationError_1 = require("../model/RBValidationError");
|
|
19
|
-
const IntegrationAuditModel_1 = require("../model/storage/IntegrationAuditModel");
|
|
20
|
-
const types_1 = require("./figshare-v2/types");
|
|
21
|
-
const lodash_1 = require("lodash");
|
|
22
|
-
const RecordsService_1 = require("../RecordsService");
|
|
23
19
|
var Services;
|
|
24
20
|
(function (Services) {
|
|
25
21
|
class FigshareService extends CoreService_1.Services.Core.Service {
|
|
@@ -40,6 +36,11 @@ var Services;
|
|
|
40
36
|
'writeBack',
|
|
41
37
|
'syncRecordWithFigshare',
|
|
42
38
|
'init',
|
|
39
|
+
'validateFigshareRecord',
|
|
40
|
+
'wakeFigshareRecord',
|
|
41
|
+
'requestFigshareCleanup',
|
|
42
|
+
'dispatchSyncJob',
|
|
43
|
+
'syncRecordJob',
|
|
43
44
|
];
|
|
44
45
|
_msgPrefix;
|
|
45
46
|
msgPrefix() {
|
|
@@ -61,8 +62,8 @@ var Services;
|
|
|
61
62
|
if (error instanceof RBValidationError_1.RBValidationError) {
|
|
62
63
|
return {
|
|
63
64
|
responseSummary: {
|
|
64
|
-
displayErrors: error.displayErrors
|
|
65
|
-
}
|
|
65
|
+
displayErrors: error.displayErrors
|
|
66
|
+
}
|
|
66
67
|
};
|
|
67
68
|
}
|
|
68
69
|
const httpError = error;
|
|
@@ -79,8 +80,8 @@ var Services;
|
|
|
79
80
|
...(statusCode != null ? { statusCode } : {}),
|
|
80
81
|
// Plain-text API responses (e.g. "Unauthorized") still carry diagnostic value;
|
|
81
82
|
// keep them in the audit summary (same field name as doi-v2's toResponseSummary).
|
|
82
|
-
...(responseBody != null ? { rawResponseBody: String(responseBody) } : {})
|
|
83
|
-
}
|
|
83
|
+
...(responseBody != null ? { rawResponseBody: String(responseBody) } : {})
|
|
84
|
+
}
|
|
84
85
|
};
|
|
85
86
|
}
|
|
86
87
|
wrapHttpError(error, message, fallbackStatus) {
|
|
@@ -92,8 +93,7 @@ var Services;
|
|
|
92
93
|
throw new RBValidationError_1.RBValidationError({
|
|
93
94
|
message: `${this.msgPrefix()} ${message}`,
|
|
94
95
|
options: { cause: error },
|
|
95
|
-
displayErrors: this.figshareResponseToRBValidationError(statusCode ?? 500, undefined, figshareMessage)
|
|
96
|
-
.displayErrors,
|
|
96
|
+
displayErrors: this.figshareResponseToRBValidationError(statusCode ?? 500, undefined, figshareMessage).displayErrors
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
getFigshareResponseMessage(error) {
|
|
@@ -128,7 +128,7 @@ var Services;
|
|
|
128
128
|
: TranslationService.t(message);
|
|
129
129
|
return new RBValidationError_1.RBValidationError({
|
|
130
130
|
message: `${this.msgPrefix()} ${messagePrefix ?? translated}`,
|
|
131
|
-
displayErrors: [{ code: message, title: this.msgPrefix(), detail: translated }]
|
|
131
|
+
displayErrors: [{ code: message, title: this.msgPrefix(), detail: translated }]
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
134
|
assertConfig(record, operation) {
|
|
@@ -155,7 +155,7 @@ var Services;
|
|
|
155
155
|
}
|
|
156
156
|
makeClient(config, record, jobId, triggerSource = 'manual') {
|
|
157
157
|
const runContext = (0, context_1.createRunContext)(record, config, jobId, triggerSource);
|
|
158
|
-
return config.runtime.mode === 'fixture' ? (0, http_1.makeFixtureClient)(config) : (0, http_1.makeLiveClient)(config, runContext);
|
|
158
|
+
return (0, execution_1.workerClient)(config.runtime.mode === 'fixture' ? (0, http_1.makeFixtureClient)(config) : (0, http_1.makeLiveClient)(config, runContext));
|
|
159
159
|
}
|
|
160
160
|
preparePublication(record, jobId) {
|
|
161
161
|
const config = this.getConfig(record);
|
|
@@ -218,596 +218,95 @@ var Services;
|
|
|
218
218
|
const client = this.makeClient(config, record, undefined, 'ensureNoFileUploadInProgress');
|
|
219
219
|
await (0, runtime_1.ensureNoFileUploadInProgress)(client, articleId);
|
|
220
220
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
const recordConfig = sails.config.record;
|
|
230
|
-
const datastreamServiceName = String(recordConfig?.datastreamService ?? '');
|
|
231
|
-
const datastreamService = datastreamServiceName
|
|
232
|
-
? sails.services?.[datastreamServiceName]
|
|
233
|
-
: undefined;
|
|
234
|
-
for (const entry of [...dataLocations]) {
|
|
235
|
-
if (entry.type !== 'attachment' || entry.fileId == null) {
|
|
236
|
-
continue;
|
|
237
|
-
}
|
|
238
|
-
const uploaded = articleFiles.find(file => file.name === (entry.name ?? ''));
|
|
239
|
-
if (uploaded == null) {
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
const removeDatastream = datastreamService?.removeDatastream;
|
|
243
|
-
if (removeDatastream != null) {
|
|
244
|
-
try {
|
|
245
|
-
await removeDatastream(record.redboxOid ?? record.id ?? '', entry);
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
sails.log.warn(`FigService - failed to remove datastream for record '${record.redboxOid ?? record.id ?? ''}'`, {
|
|
249
|
-
entry,
|
|
250
|
-
error: error instanceof Error ? error.message : String(error),
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
const idx = dataLocations.indexOf(entry);
|
|
255
|
-
if (idx >= 0) {
|
|
256
|
-
dataLocations.splice(idx, 1);
|
|
257
|
-
}
|
|
258
|
-
const downloadUrl = typeof uploaded.download_url === 'string' ? uploaded.download_url.trim() : '';
|
|
259
|
-
if (downloadUrl === '') {
|
|
260
|
-
sails.log.warn(`FigService - uploaded file '${uploaded.name}' for entry '${String(entry.selected ?? '')}' has no download URL; skipping write-back URL replacement`);
|
|
261
|
-
continue;
|
|
262
|
-
}
|
|
263
|
-
dataLocations.push({
|
|
264
|
-
type: 'url',
|
|
265
|
-
location: downloadUrl,
|
|
266
|
-
notes: `File name: ${uploaded.name}`,
|
|
267
|
-
originalFileName: uploaded.name,
|
|
268
|
-
ignore: true,
|
|
269
|
-
selected: entry.selected ?? false,
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
(0, types_1.setRecordField)(record, config.record.dataLocationsPath, dataLocations);
|
|
273
|
-
const uploadedFlagPath = config.record.allFilesUploadedPath;
|
|
274
|
-
if (typeof uploadedFlagPath === 'string' && uploadedFlagPath !== '') {
|
|
275
|
-
(0, types_1.setRecordField)(record, uploadedFlagPath, 'yes');
|
|
276
|
-
}
|
|
277
|
-
return record;
|
|
278
|
-
}
|
|
279
|
-
async isArticleReadyForWorkflowTransition(config, record, articleId, figshareTargetFieldKey, figshareTargetFieldValue) {
|
|
280
|
-
if (!articleId.trim()) {
|
|
281
|
-
sails.log.error(`FigService - the article id '${articleId}' is not valid`);
|
|
282
|
-
return false;
|
|
283
|
-
}
|
|
284
|
-
const client = this.makeClient(config, record, `${articleId}:workflow-transition`, 'transitionRecordWorkflowFromFigshareArticlePropertiesJob');
|
|
285
|
-
const article = await client.getArticle(articleId);
|
|
286
|
-
const figshareFieldValue = article[figshareTargetFieldKey] ?? null;
|
|
287
|
-
if (figshareFieldValue == null || figshareFieldValue !== figshareTargetFieldValue) {
|
|
288
|
-
sails.log.warn(`FigService - the article id '${articleId}' item property '${figshareTargetFieldKey}' value '${JSON.stringify(figshareFieldValue)}' is not '${JSON.stringify(figshareTargetFieldValue)}'`);
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
const files = await this.getArticleFiles(client, articleId);
|
|
292
|
-
const uploadInProgress = files.some(entry => String(entry.status ?? '').toLowerCase() === 'created');
|
|
293
|
-
if (uploadInProgress) {
|
|
294
|
-
sails.log.warn(`FigService - the article id '${articleId}' has an upload in progress`);
|
|
295
|
-
return false;
|
|
296
|
-
}
|
|
297
|
-
return true;
|
|
221
|
+
warnedDisabledBrands = new Set();
|
|
222
|
+
warnDisabledProcessing(record) {
|
|
223
|
+
const config = (0, config_1.resolveFigsharePublishingConfig)(record, { requireToken: false });
|
|
224
|
+
const brand = (0, config_1.getBrandName)(record);
|
|
225
|
+
if (!config || config.processing?.enabled || this.warnedDisabledBrands.has(brand))
|
|
226
|
+
return;
|
|
227
|
+
this.warnedDisabledBrands.add(brand);
|
|
228
|
+
sails.log.warn(`Figshare legacy hook for brand ${brand} cannot synchronise articles while figsharePublishing.processing.enabled is false; enable queued processing after completing the migration checks.`);
|
|
298
229
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
if (
|
|
230
|
+
warnedAliases = new Set();
|
|
231
|
+
deprecate(name, replacement) {
|
|
232
|
+
if (this.warnedAliases.has(name))
|
|
302
233
|
return;
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
if (!(await this.isArticleReadyForWorkflowTransition(config, record, articleId, figshareTargetFieldKey, figshareTargetFieldValue))) {
|
|
306
|
-
throw new Error(`Cannot transition ${msgPartial} because the linked article is not in the required state`);
|
|
307
|
-
}
|
|
308
|
-
const currentRec = (await RecordsService.getMeta(oid));
|
|
309
|
-
const brandId = currentRec.metaMetadata?.brandId;
|
|
310
|
-
const brand = (brandId ? (BrandingService.getBrandById(brandId) ?? BrandingService.getBrand(brandId)) : null) ??
|
|
311
|
-
BrandingService.getDefault();
|
|
312
|
-
const userRoles = user.roles ?? [];
|
|
313
|
-
const hasEditAccess = await RecordsService.hasEditAccess(brand, user, userRoles, currentRec);
|
|
314
|
-
if (!hasEditAccess) {
|
|
315
|
-
throw new Error(`Cannot transition ${msgPartial} because user '${user.username}' does not have edit permission`);
|
|
316
|
-
}
|
|
317
|
-
const recordTypeName = currentRec.metaMetadata?.type ?? '';
|
|
318
|
-
const recordType = await RecordTypesService.get(brand, recordTypeName).toPromise();
|
|
319
|
-
if (!recordType) {
|
|
320
|
-
throw new Error(`Cannot transition ${msgPartial} because record type is missing`);
|
|
321
|
-
}
|
|
322
|
-
const nextStepResp = await WorkflowStepsService.get(recordType, targetStep).toPromise();
|
|
323
|
-
const recordUpdateResult = await RecordsService.updateMetaInternal({
|
|
324
|
-
actor: { kind: 'service', id: 'FigshareService.transitionWorkflowForRecord' },
|
|
325
|
-
authorization: { kind: 'record-edit' },
|
|
326
|
-
mutationClass: 'transition',
|
|
327
|
-
operation: 'transition',
|
|
328
|
-
brand,
|
|
329
|
-
oid,
|
|
330
|
-
record: currentRec,
|
|
331
|
-
user,
|
|
332
|
-
targetStep: nextStepResp,
|
|
333
|
-
});
|
|
334
|
-
if (recordUpdateResult.wasPersisted()) {
|
|
335
|
-
if (recordUpdateResult.outcome === 'saved-with-warnings') {
|
|
336
|
-
sails.log.warn(`FigService - updated ${msgPartial} with warnings`, {
|
|
337
|
-
requestId: recordUpdateResult.requestId,
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
else {
|
|
341
|
-
sails.log.info(`FigService - updated ${msgPartial}`);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
else {
|
|
345
|
-
throw new Error(`Failed to update ${msgPartial}: ${JSON.stringify(recordUpdateResult)}`);
|
|
346
|
-
}
|
|
234
|
+
this.warnedAliases.add(name);
|
|
235
|
+
sails.log.warn(`Figshare ${name} is deprecated; configure ${replacement}.`);
|
|
347
236
|
}
|
|
348
|
-
async
|
|
349
|
-
|
|
350
|
-
const rm = record;
|
|
351
|
-
if (config == null) {
|
|
237
|
+
async validateFigshareRecord(oid, record, options = {}, user) {
|
|
238
|
+
if (!this.shouldRunFigshareLifecycleSync(oid, record, options, user))
|
|
352
239
|
return record;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
if (plan.action === 'skip') {
|
|
240
|
+
const config = (0, config_1.resolveFigsharePublishingConfig)(record, { requireToken: false });
|
|
241
|
+
if (!config)
|
|
356
242
|
return record;
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
triggerSource,
|
|
361
|
-
jobId,
|
|
362
|
-
correlationId: plan.syncState.correlationId,
|
|
363
|
-
articleId: plan.articleId,
|
|
364
|
-
phase: 'sync-start',
|
|
365
|
-
});
|
|
366
|
-
try {
|
|
367
|
-
let article = await this.syncMetadata(rm, plan);
|
|
368
|
-
const assetSyncResult = await this.syncAssets(rm, article);
|
|
369
|
-
await this.syncEmbargo(rm, String(article?.id ?? plan.articleId ?? ''));
|
|
370
|
-
const publishResult = await this.publishIfNeeded(rm, String(article?.id ?? plan.articleId ?? ''));
|
|
371
|
-
if (Object.keys(publishResult).length > 0) {
|
|
372
|
-
article = await this.makeClient(config, rm, plan.syncState.correlationId, triggerSource).getArticle(String(article?.id ?? plan.articleId ?? ''));
|
|
373
|
-
}
|
|
374
|
-
const updatedRecord = this.writeBack(rm, article, publishResult, assetSyncResult);
|
|
375
|
-
(0, audit_1.completeFigshareAudit)(auditCtx, {
|
|
376
|
-
message: 'Figshare sync completed successfully.',
|
|
377
|
-
responseSummary: {
|
|
378
|
-
triggerSource,
|
|
379
|
-
jobId,
|
|
380
|
-
correlationId: plan.syncState.correlationId,
|
|
381
|
-
articleId: String(article?.id ?? plan.articleId ?? ''),
|
|
382
|
-
phases: ['metadata sync', 'asset sync', 'embargo sync', 'publish', 'write-back'],
|
|
383
|
-
publishResult,
|
|
384
|
-
partialProgress: this.getSyncState(config, rm).partialProgress,
|
|
385
|
-
},
|
|
386
|
-
});
|
|
387
|
-
return updatedRecord;
|
|
388
|
-
}
|
|
389
|
-
catch (error) {
|
|
390
|
-
const syncState = this.getSyncState(config, rm);
|
|
391
|
-
syncState.status = 'failed';
|
|
392
|
-
syncState.lastError = error instanceof Error ? error.message : String(error);
|
|
393
|
-
this.setSyncState(config, rm, syncState);
|
|
394
|
-
const errorSummary = this.summarizeError(error);
|
|
395
|
-
(0, audit_1.failFigshareAudit)(auditCtx, error, {
|
|
396
|
-
message: 'Figshare sync failed.',
|
|
397
|
-
errorDetail: error instanceof Error ? error.message : String(error),
|
|
398
|
-
httpStatusCode: errorSummary.statusCode,
|
|
399
|
-
responseSummary: {
|
|
400
|
-
triggerSource,
|
|
401
|
-
jobId,
|
|
402
|
-
correlationId: plan.syncState.correlationId,
|
|
403
|
-
articleId: plan.articleId,
|
|
404
|
-
phase: 'syncRecordWithFigshare',
|
|
405
|
-
partialProgress: syncState.partialProgress,
|
|
406
|
-
...(errorSummary.responseSummary != null ? { error: errorSummary.responseSummary } : {}),
|
|
407
|
-
},
|
|
408
|
-
});
|
|
409
|
-
this.wrapHttpError(error, TranslationService.t('figshare-error-syncing-record'));
|
|
410
|
-
}
|
|
243
|
+
// Bindings and local validation only. Account/license network lookup belongs to the worker.
|
|
244
|
+
await (0, metadata_1.buildMetadataPayload)(config, record);
|
|
245
|
+
return record;
|
|
411
246
|
}
|
|
412
|
-
async
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
user,
|
|
424
|
-
triggerPreSaveTriggers: false,
|
|
425
|
-
triggerPostSaveTriggers: false,
|
|
426
|
-
metadata: (0, RecordsService_1.createRecordMetadataDelta)(previousMetadata, record.metadata),
|
|
427
|
-
metadataMode: 'pre-applied',
|
|
428
|
-
});
|
|
429
|
-
if (response != null && typeof response.wasPersisted === 'function' && !response.wasPersisted()) {
|
|
430
|
-
sails.log.error(`FigService - failed to persist Figshare sync state for ${oid}: ${JSON.stringify(response)}`);
|
|
431
|
-
return false;
|
|
432
|
-
}
|
|
433
|
-
if (response?.outcome === 'saved-with-warnings') {
|
|
434
|
-
sails.log.warn(`FigService - persisted Figshare sync state with warnings for ${oid}`, {
|
|
435
|
-
requestId: response.requestId,
|
|
436
|
-
});
|
|
437
|
-
}
|
|
438
|
-
return true;
|
|
439
|
-
}
|
|
440
|
-
catch (error) {
|
|
441
|
-
sails.log.error(`FigService - failed to persist Figshare sync state for ${oid}`, error);
|
|
442
|
-
return false;
|
|
247
|
+
async wakeFigshareRecord(oid, record) {
|
|
248
|
+
const fresh = await RecordsService.getMeta(oid);
|
|
249
|
+
const config = fresh && (0, config_1.resolveFigsharePublishingConfig)(fresh, { requireToken: false });
|
|
250
|
+
if (!fresh || !config?.processing?.enabled || config.processingError || fresh.figshareSyncIntent?.readiness === 'initialising')
|
|
251
|
+
return record;
|
|
252
|
+
const store = (0, worker_1.getSyncStore)();
|
|
253
|
+
await store.ensureIndexes();
|
|
254
|
+
await (0, worker_1.importRecordIntent)(store, fresh);
|
|
255
|
+
const state = await store.get(oid);
|
|
256
|
+
if (state?.nextActionAt != null) {
|
|
257
|
+
await AgendaQueueService.schedule('Figshare-SyncRecord', `in ${Math.min(config.processing.coalesceMs, 900000)} milliseconds`, { oid, brandId: fresh.metaMetadata.brandId });
|
|
443
258
|
}
|
|
259
|
+
return record;
|
|
444
260
|
}
|
|
261
|
+
async dispatchSyncJob() { await (0, worker_1.dispatchFigshare)(); }
|
|
262
|
+
async syncRecordJob(job) { await (0, worker_1.runFigshareWorker)(this, job); }
|
|
445
263
|
createUpdateFigshareArticle(oid, record, options, user) {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
}
|
|
450
|
-
if (this.getConfig(record) == null) {
|
|
451
|
-
return record;
|
|
452
|
-
}
|
|
453
|
-
return this.syncRecordWithFigshare(record, `${oid}:pre`, 'pre-save');
|
|
264
|
+
this.deprecate('createUpdateFigshareArticle', 'validateFigshareRecord');
|
|
265
|
+
this.warnDisabledProcessing(record);
|
|
266
|
+
return this.validateFigshareRecord(oid, record, options, user);
|
|
454
267
|
}
|
|
455
|
-
uploadFilesToFigshareArticle(oid, record,
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
}
|
|
460
|
-
if (this.getConfig(record) == null) {
|
|
461
|
-
return record;
|
|
462
|
-
}
|
|
463
|
-
const previousMetadata = (0, lodash_1.cloneDeep)(record.metadata);
|
|
464
|
-
void this.syncRecordWithFigshare(record, `${oid}:post`, 'post-save')
|
|
465
|
-
.then(async (updatedRecord) => {
|
|
466
|
-
const persisted = await this.persistSyncRecord(oid, updatedRecord, user, previousMetadata);
|
|
467
|
-
if (persisted === false) {
|
|
468
|
-
const config = this.getConfig(updatedRecord);
|
|
469
|
-
if (config != null) {
|
|
470
|
-
const runContext = (0, context_1.createRunContext)(updatedRecord, config, `${oid}:post-persist`, 'post-save');
|
|
471
|
-
const auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.syncRecordWithFigshare, runContext, {
|
|
472
|
-
triggerSource: 'post-save',
|
|
473
|
-
jobId: `${oid}:post-persist`,
|
|
474
|
-
correlationId: `${oid}:post-persist`,
|
|
475
|
-
phase: 'persist-sync-record',
|
|
476
|
-
});
|
|
477
|
-
(0, audit_1.failFigshareAudit)(auditCtx, new Error(`Failed to persist Figshare sync state for record '${oid}'.`), {
|
|
478
|
-
message: 'Figshare sync failed while persisting Redbox state.',
|
|
479
|
-
responseSummary: { oid, phase: 'persist-sync-record' },
|
|
480
|
-
});
|
|
481
|
-
}
|
|
482
|
-
return;
|
|
483
|
-
}
|
|
484
|
-
const config = this.getConfig(updatedRecord);
|
|
485
|
-
if (config != null) {
|
|
486
|
-
const rm = updatedRecord;
|
|
487
|
-
const syncState = this.getSyncState(config, rm);
|
|
488
|
-
const articleId = String((0, types_1.getRecordField)(rm, config.record.articleIdPath) ?? '');
|
|
489
|
-
const brandId = rm.metaMetadata?.brandId ?? '';
|
|
490
|
-
const attachmentCount = Number(syncState.partialProgress?.attachmentCount ?? 0);
|
|
491
|
-
const uploadsComplete = syncState.partialProgress?.uploadsComplete === true;
|
|
492
|
-
if (attachmentCount > 0 && articleId !== '') {
|
|
493
|
-
if (config.article.publishMode === 'afterUploadsComplete') {
|
|
494
|
-
this.queuePublishAfterUploadFiles(oid, articleId, user, brandId);
|
|
495
|
-
}
|
|
496
|
-
else if (config.article.publishMode === 'immediate' && uploadsComplete) {
|
|
497
|
-
this.queueDeleteFiles(oid, user, brandId, articleId);
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
})
|
|
502
|
-
.catch(async (error) => {
|
|
503
|
-
await this.persistSyncRecord(oid, record, user, previousMetadata);
|
|
504
|
-
sails.log.error(`FigService - uploadFilesToFigshareArticle sync failed for ${oid}`, error);
|
|
505
|
-
});
|
|
268
|
+
uploadFilesToFigshareArticle(oid, record, _options, _user) {
|
|
269
|
+
this.deprecate('uploadFilesToFigshareArticle', 'wakeFigshareRecord');
|
|
270
|
+
this.warnDisabledProcessing(record);
|
|
271
|
+
return this.wakeFigshareRecord(oid, record);
|
|
506
272
|
}
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
triggerSource: 'deleteFilesFromRedboxTrigger',
|
|
521
|
-
jobId: `${oid}:cleanup-trigger`,
|
|
522
|
-
articleId,
|
|
523
|
-
phase: 'cleanup-uploaded-files',
|
|
524
|
-
});
|
|
525
|
-
try {
|
|
526
|
-
const updatedRecord = await this.cleanupUploadedFiles(rm, articleId);
|
|
527
|
-
(0, audit_1.completeFigshareAudit)(auditCtx, {
|
|
528
|
-
message: 'Figshare uploaded file cleanup trigger completed successfully.',
|
|
529
|
-
responseSummary: { articleId, phase: 'cleanup-uploaded-files' },
|
|
530
|
-
});
|
|
531
|
-
return updatedRecord;
|
|
532
|
-
}
|
|
533
|
-
catch (error) {
|
|
534
|
-
(0, audit_1.failFigshareAudit)(auditCtx, error, {
|
|
535
|
-
message: 'Figshare uploaded file cleanup trigger failed.',
|
|
536
|
-
errorDetail: error instanceof Error ? error.message : String(error),
|
|
537
|
-
responseSummary: { articleId, phase: 'cleanup-uploaded-files' },
|
|
538
|
-
});
|
|
539
|
-
throw error;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
273
|
+
requestFigshareCleanup(_oid, record, _options, _user) {
|
|
274
|
+
// RecordsService recognises this configured hook and commits cleanup-only intent.
|
|
275
|
+
return record;
|
|
276
|
+
}
|
|
277
|
+
deleteFilesFromRedboxTrigger(oid, record, options, user) {
|
|
278
|
+
this.deprecate('deleteFilesFromRedboxTrigger', 'requestFigshareCleanup');
|
|
279
|
+
this.warnDisabledProcessing(record);
|
|
280
|
+
return this.requestFigshareCleanup(oid, record, options, user);
|
|
281
|
+
}
|
|
282
|
+
async syncRecordWithFigshare(record, _jobId, _triggerSource) {
|
|
283
|
+
this.deprecate('syncRecordWithFigshare', 'wakeFigshareRecord');
|
|
284
|
+
this.warnDisabledProcessing(record);
|
|
285
|
+
await this.wakeFigshareRecord(record.redboxOid ?? record.id, record);
|
|
542
286
|
return record;
|
|
543
287
|
}
|
|
544
288
|
async publishAfterUploadFilesJob(job) {
|
|
545
|
-
|
|
546
|
-
if (data
|
|
547
|
-
|
|
548
|
-
return;
|
|
549
|
-
}
|
|
550
|
-
const oid = data.oid ?? '';
|
|
551
|
-
const articleId = data.articleId ?? '';
|
|
552
|
-
const brandId = data.brandId ?? '';
|
|
553
|
-
const user = data.user;
|
|
554
|
-
if (!oid.trim()) {
|
|
555
|
-
sails.log.error(`FigService - cannot publish uploaded files because the record oid is empty before calling RecordsService.getMeta`);
|
|
556
|
-
return;
|
|
557
|
-
}
|
|
558
|
-
const record = (await RecordsService.getMeta(oid));
|
|
559
|
-
const previousMetadata = (0, lodash_1.cloneDeep)(record.metadata);
|
|
560
|
-
const config = this.getConfig(record);
|
|
561
|
-
if (config == null) {
|
|
562
|
-
return;
|
|
563
|
-
}
|
|
564
|
-
const runContext = (0, context_1.createRunContext)(record, config, `${oid}:publish-job`, 'publishAfterUploadFilesJob');
|
|
565
|
-
const auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.publishAfterUploadFilesJob, runContext, {
|
|
566
|
-
triggerSource: 'publishAfterUploadFilesJob',
|
|
567
|
-
jobId: `${oid}:publish-job`,
|
|
568
|
-
correlationId: `${oid}:publish-job`,
|
|
569
|
-
articleId,
|
|
570
|
-
phase: 'publish',
|
|
571
|
-
});
|
|
572
|
-
if (!articleId.trim()) {
|
|
573
|
-
const error = new Error(`Cannot publish uploaded files for record '${oid}' because the Figshare article id is empty`);
|
|
574
|
-
sails.log.error(`FigService - ${error.message}`);
|
|
575
|
-
(0, audit_1.failFigshareAudit)(auditCtx, error, {
|
|
576
|
-
message: 'Figshare publish-after-uploads job failed.',
|
|
577
|
-
errorDetail: error.message,
|
|
578
|
-
responseSummary: {
|
|
579
|
-
articleId,
|
|
580
|
-
correlationId: `${oid}:publish-job`,
|
|
581
|
-
phase: 'publish',
|
|
582
|
-
},
|
|
583
|
-
});
|
|
584
|
-
return;
|
|
585
|
-
}
|
|
586
|
-
const client = this.makeClient(config, record, `${oid}:publish-job`, 'publishAfterUploadFilesJob');
|
|
587
|
-
try {
|
|
588
|
-
await this.ensureNoFileUploadInProgress(config, record, articleId);
|
|
589
|
-
}
|
|
590
|
-
catch (error) {
|
|
591
|
-
if (!(error instanceof RBValidationError_1.RBValidationError)) {
|
|
592
|
-
const errorSummary = this.summarizeError(error);
|
|
593
|
-
(0, audit_1.failFigshareAudit)(auditCtx, error, {
|
|
594
|
-
message: 'Figshare publish-after-uploads job failed while checking upload status.',
|
|
595
|
-
errorDetail: error instanceof Error ? error.message : String(error),
|
|
596
|
-
httpStatusCode: errorSummary.statusCode,
|
|
597
|
-
responseSummary: {
|
|
598
|
-
articleId,
|
|
599
|
-
correlationId: `${oid}:publish-job`,
|
|
600
|
-
phase: 'verify-upload-status',
|
|
601
|
-
...(errorSummary.responseSummary != null ? { error: errorSummary.responseSummary } : {}),
|
|
602
|
-
},
|
|
603
|
-
});
|
|
604
|
-
this.wrapHttpError(error, TranslationService.t('figshare-error-verifying-upload'));
|
|
605
|
-
}
|
|
606
|
-
sails.log.warn(`FigService - article '${articleId}' still has uploads in progress, rescheduling deferred publish`, error);
|
|
607
|
-
try {
|
|
608
|
-
this.queuePublishAfterUploadFiles(oid, articleId, user, brandId);
|
|
609
|
-
return;
|
|
610
|
-
}
|
|
611
|
-
catch (queueError) {
|
|
612
|
-
(0, audit_1.failFigshareAudit)(auditCtx, queueError, {
|
|
613
|
-
message: 'Figshare publish-after-uploads job could not be rescheduled while uploads were still in progress.',
|
|
614
|
-
errorDetail: queueError instanceof Error ? queueError.message : String(queueError),
|
|
615
|
-
responseSummary: {
|
|
616
|
-
articleId,
|
|
617
|
-
correlationId: `${oid}:publish-job`,
|
|
618
|
-
phase: 'publish',
|
|
619
|
-
rescheduled: false,
|
|
620
|
-
},
|
|
621
|
-
});
|
|
622
|
-
throw queueError;
|
|
623
|
-
}
|
|
624
|
-
}
|
|
625
|
-
try {
|
|
626
|
-
const publishResult = await client.publishArticle(articleId, {});
|
|
627
|
-
const article = await client.getArticle(articleId);
|
|
628
|
-
const updatedRecord = this.writeBack(record, article, publishResult);
|
|
629
|
-
const persisted = await this.persistSyncRecord(oid, updatedRecord, user, previousMetadata);
|
|
630
|
-
if (persisted === false) {
|
|
631
|
-
throw new Error(`Failed to persist Figshare publish state for record '${oid}'.`);
|
|
632
|
-
}
|
|
633
|
-
this.queueDeleteFiles(oid, user, brandId, articleId);
|
|
634
|
-
(0, audit_1.completeFigshareAudit)(auditCtx, {
|
|
635
|
-
message: 'Figshare publish-after-uploads job completed successfully.',
|
|
636
|
-
responseSummary: {
|
|
637
|
-
articleId,
|
|
638
|
-
correlationId: `${oid}:publish-job`,
|
|
639
|
-
publishResult,
|
|
640
|
-
cleanupQueued: true,
|
|
641
|
-
},
|
|
642
|
-
});
|
|
643
|
-
}
|
|
644
|
-
catch (error) {
|
|
645
|
-
const errorSummary = this.summarizeError(error);
|
|
646
|
-
(0, audit_1.failFigshareAudit)(auditCtx, error, {
|
|
647
|
-
message: 'Figshare publish-after-uploads job failed.',
|
|
648
|
-
errorDetail: error instanceof Error ? error.message : String(error),
|
|
649
|
-
httpStatusCode: errorSummary.statusCode,
|
|
650
|
-
responseSummary: {
|
|
651
|
-
articleId,
|
|
652
|
-
correlationId: `${oid}:publish-job`,
|
|
653
|
-
phase: 'publish',
|
|
654
|
-
...(errorSummary.responseSummary != null ? { error: errorSummary.responseSummary } : {}),
|
|
655
|
-
},
|
|
656
|
-
});
|
|
657
|
-
this.wrapHttpError(error, TranslationService.t('figshare-error-publishing-article'));
|
|
658
|
-
}
|
|
289
|
+
this.deprecate('publishAfterUploadFilesJob', 'syncRecordJob');
|
|
290
|
+
if (job.attrs?.data?.oid)
|
|
291
|
+
await this.wakeFigshareRecord(job.attrs.data.oid);
|
|
659
292
|
}
|
|
660
293
|
async deleteFilesFromRedbox(job) {
|
|
661
|
-
|
|
662
|
-
if (data
|
|
663
|
-
|
|
664
|
-
return;
|
|
665
|
-
}
|
|
666
|
-
const oid = data.oid ?? '';
|
|
667
|
-
const articleId = data.articleId ?? '';
|
|
668
|
-
const brandId = data.brandId ?? '';
|
|
669
|
-
const user = data.user;
|
|
670
|
-
if (!oid.trim()) {
|
|
671
|
-
return;
|
|
672
|
-
}
|
|
673
|
-
let record = (await RecordsService.getMeta(oid));
|
|
674
|
-
const previousMetadata = (0, lodash_1.cloneDeep)(record.metadata);
|
|
675
|
-
const config = this.getConfig(record);
|
|
676
|
-
if (config == null) {
|
|
677
|
-
return;
|
|
678
|
-
}
|
|
679
|
-
const runContext = (0, context_1.createRunContext)(record, config, `${oid}:cleanup-job`, 'deleteFilesFromRedbox');
|
|
680
|
-
const auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.cleanupUploadedFilesJob, runContext, {
|
|
681
|
-
triggerSource: 'deleteFilesFromRedbox',
|
|
682
|
-
jobId: `${oid}:cleanup-job`,
|
|
683
|
-
correlationId: `${oid}:cleanup-job`,
|
|
684
|
-
articleId,
|
|
685
|
-
phase: 'cleanup-uploaded-files',
|
|
686
|
-
});
|
|
687
|
-
try {
|
|
688
|
-
record = (await this.cleanupUploadedFiles(record, articleId));
|
|
689
|
-
const persisted = await this.persistSyncRecord(oid, record, user, previousMetadata);
|
|
690
|
-
if (persisted === false) {
|
|
691
|
-
throw new Error(`Failed to persist Figshare cleanup state for record '${oid}'.`);
|
|
692
|
-
}
|
|
693
|
-
(0, audit_1.completeFigshareAudit)(auditCtx, {
|
|
694
|
-
message: 'Figshare uploaded file cleanup job completed successfully.',
|
|
695
|
-
responseSummary: { articleId, brandId, phase: 'cleanup-uploaded-files' },
|
|
696
|
-
});
|
|
697
|
-
}
|
|
698
|
-
catch (error) {
|
|
699
|
-
(0, audit_1.failFigshareAudit)(auditCtx, error, {
|
|
700
|
-
message: 'Figshare uploaded file cleanup job failed.',
|
|
701
|
-
errorDetail: error instanceof Error ? error.message : String(error),
|
|
702
|
-
responseSummary: { articleId, brandId, phase: 'cleanup-uploaded-files' },
|
|
703
|
-
});
|
|
704
|
-
throw error;
|
|
705
|
-
}
|
|
294
|
+
this.deprecate('deleteFilesFromRedbox', 'syncRecordJob');
|
|
295
|
+
if (job.attrs?.data?.oid)
|
|
296
|
+
await this.wakeFigshareRecord(job.attrs.data.oid);
|
|
706
297
|
}
|
|
707
|
-
queuePublishAfterUploadFiles(oid,
|
|
708
|
-
|
|
709
|
-
const jobName = 'Figshare-PublishAfterUpload-Service';
|
|
710
|
-
const record = {
|
|
711
|
-
metaMetadata: { brandId },
|
|
712
|
-
};
|
|
713
|
-
const config = this.getConfig(record);
|
|
714
|
-
const scheduleIn = String(config?.queue.publishAfterUploadDelay ?? 'in 2 minutes');
|
|
715
|
-
if (scheduleIn === 'immediate') {
|
|
716
|
-
AgendaQueueService.now(jobName, queueMessage);
|
|
717
|
-
}
|
|
718
|
-
else {
|
|
719
|
-
AgendaQueueService.schedule(jobName, scheduleIn, queueMessage);
|
|
720
|
-
}
|
|
298
|
+
queuePublishAfterUploadFiles(oid, _articleId, _user, _brandId) {
|
|
299
|
+
return this.wakeFigshareRecord(oid);
|
|
721
300
|
}
|
|
722
|
-
queueDeleteFiles(oid,
|
|
723
|
-
|
|
724
|
-
const jobName = 'Figshare-UploadedFilesCleanup-Service';
|
|
725
|
-
const record = {
|
|
726
|
-
metaMetadata: { brandId },
|
|
727
|
-
};
|
|
728
|
-
const config = this.getConfig(record);
|
|
729
|
-
const scheduleIn = String(config?.queue.uploadedFilesCleanupDelay ?? 'in 5 minutes');
|
|
730
|
-
if (scheduleIn === 'immediate') {
|
|
731
|
-
AgendaQueueService.now(jobName, queueMessage);
|
|
732
|
-
}
|
|
733
|
-
else {
|
|
734
|
-
AgendaQueueService.schedule(jobName, scheduleIn, queueMessage);
|
|
735
|
-
}
|
|
301
|
+
queueDeleteFiles(oid, _user, _brandId, _articleId) {
|
|
302
|
+
return this.wakeFigshareRecord(oid);
|
|
736
303
|
}
|
|
737
304
|
async transitionRecordWorkflowFromFigshareArticlePropertiesJob(_job) {
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
if (!(0, workflow_1.shouldRunWorkflowTransitionJob)(jobConfig)) {
|
|
741
|
-
sails.log.info('FigService - transitionRecordWorkflowFromFigshareArticlePropertiesJob is disabled by config');
|
|
742
|
-
return;
|
|
743
|
-
}
|
|
744
|
-
try {
|
|
745
|
-
const brand = BrandingService.getBrand('default');
|
|
746
|
-
const start = 0;
|
|
747
|
-
const rows = 30;
|
|
748
|
-
const maxRecords = 100;
|
|
749
|
-
const namedQuery = jobConfig.namedQuery ?? '';
|
|
750
|
-
const targetStep = jobConfig.targetStep ?? '';
|
|
751
|
-
const paramMap = jobConfig.paramMap ?? {};
|
|
752
|
-
const figshareTargetFieldKey = jobConfig.figshareTargetFieldKey ?? '';
|
|
753
|
-
const figshareTargetFieldValue = jobConfig.figshareTargetFieldValue ?? '';
|
|
754
|
-
const username = jobConfig.username ?? '';
|
|
755
|
-
const userType = jobConfig.userType ?? '';
|
|
756
|
-
const user = await UsersService.getUserWithUsername(username).toPromise();
|
|
757
|
-
if (!user || !user?.username || user?.type !== userType) {
|
|
758
|
-
sails.log.error(`FigService - cannot run job because could not find user with username '${username}' and type '${userType}'`, { type: user?.type });
|
|
759
|
-
return;
|
|
760
|
-
}
|
|
761
|
-
const namedQueryConfig = await NamedQueryService.getNamedQueryConfig(brand, namedQuery);
|
|
762
|
-
if (!namedQueryConfig) {
|
|
763
|
-
sails.log.error(`FigService - named query '${namedQuery}' was not found for workflow transition job`);
|
|
764
|
-
return;
|
|
765
|
-
}
|
|
766
|
-
const queryResults = await NamedQueryService.performNamedQueryFromConfigResults(namedQueryConfig, paramMap, brand, namedQuery, start, rows, maxRecords, user);
|
|
767
|
-
for (const queryResult of queryResults) {
|
|
768
|
-
const oid = String(queryResult.oid ?? '');
|
|
769
|
-
if (oid === '') {
|
|
770
|
-
continue;
|
|
771
|
-
}
|
|
772
|
-
let auditCtx = null;
|
|
773
|
-
try {
|
|
774
|
-
const record = (await RecordsService.getMeta(oid));
|
|
775
|
-
const config = this.getConfig(record);
|
|
776
|
-
if (config == null) {
|
|
777
|
-
continue;
|
|
778
|
-
}
|
|
779
|
-
const articleId = String((0, types_1.getRecordField)(record, config.record.articleIdPath) ?? '');
|
|
780
|
-
const runContext = (0, context_1.createRunContext)(record, config, `${oid}:workflow-transition`, 'transitionRecordWorkflowFromFigshareArticlePropertiesJob');
|
|
781
|
-
auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.transitionRecordWorkflowFromFigshareArticlePropertiesJob, runContext, {
|
|
782
|
-
triggerSource: 'transitionRecordWorkflowFromFigshareArticlePropertiesJob',
|
|
783
|
-
jobId: `${oid}:workflow-transition`,
|
|
784
|
-
correlationId: `${oid}:workflow-transition`,
|
|
785
|
-
articleId,
|
|
786
|
-
targetStep,
|
|
787
|
-
phase: 'workflow-transition',
|
|
788
|
-
});
|
|
789
|
-
await this.transitionWorkflowForRecord(record, user, oid, articleId, targetStep, figshareTargetFieldKey, figshareTargetFieldValue);
|
|
790
|
-
(0, audit_1.completeFigshareAudit)(auditCtx, {
|
|
791
|
-
message: 'Figshare workflow transition job completed successfully for record.',
|
|
792
|
-
responseSummary: { articleId, targetStep, phase: 'workflow-transition' },
|
|
793
|
-
});
|
|
794
|
-
}
|
|
795
|
-
catch (error) {
|
|
796
|
-
sails.log.warn(`FigService - transitionRecordWorkflowFromFigshareArticlePropertiesJob unable to process oid ${oid}`, error);
|
|
797
|
-
(0, audit_1.failFigshareAudit)(auditCtx, error, {
|
|
798
|
-
message: 'Figshare workflow transition job failed for record.',
|
|
799
|
-
errorDetail: error instanceof Error ? error.message : String(error),
|
|
800
|
-
responseSummary: { oid, targetStep, phase: 'workflow-transition' },
|
|
801
|
-
});
|
|
802
|
-
}
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
|
-
catch (error) {
|
|
806
|
-
sails.log.error('FigService - error in transitionRecordWorkflowFromFigshareArticlePropertiesJob', error);
|
|
807
|
-
}
|
|
305
|
+
// Observation is durable and scheduled by the worker. Legacy scanners only redeliver it.
|
|
306
|
+
await this.dispatchSyncJob();
|
|
808
307
|
}
|
|
809
308
|
}
|
|
810
309
|
Services.FigshareService = FigshareService;
|
|
811
310
|
})(Services || (exports.Services = Services = {}));
|
|
812
311
|
module.exports.Services = Services;
|
|
813
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlnc2hhcmVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0ZpZ3NoYXJlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBc0Q7QUFDdEQsaURBQWlIO0FBQ2pILG1EQUF5RDtBQUN6RCw2Q0FBa0Y7QUFDbEYscURBQW9FO0FBQ3BFLGlEQUF1RDtBQUN2RCxtREFBeUQ7QUFDekQsbURBQTZEO0FBQzdELHVEQUF5RDtBQUN6RCwrQ0FBbUc7QUFDbkcsbURBTStCO0FBQy9CLCtDQUErRjtBQUMvRixxREFBd0U7QUFDeEUsNkNBQXVGO0FBQ3ZGLGtFQUErRDtBQUUvRCxrRkFBZ0Y7QUFDaEYsK0NBYzZCO0FBQzdCLG1DQUFtQztBQUNuQyxzREFBOEQ7QUFJOUQsSUFBaUIsUUFBUSxDQXErQnhCO0FBcitCRCxXQUFpQixRQUFRO0lBQ3ZCLE1BQWEsZUFBZ0IsU0FBUSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ3JDLGdCQUFnQixHQUFhO1lBQzlDLDZCQUE2QjtZQUM3Qiw4QkFBOEI7WUFDOUIsdUJBQXVCO1lBQ3ZCLDhCQUE4QjtZQUM5Qiw0QkFBNEI7WUFDNUIsa0JBQWtCO1lBQ2xCLDhCQUE4QjtZQUM5QiwwREFBMEQ7WUFDMUQsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCxZQUFZO1lBQ1osYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixXQUFXO1lBQ1gsd0JBQXdCO1lBQ3hCLE1BQU07U0FDUCxDQUFDO1FBRU0sVUFBVSxDQUFVO1FBRXBCLFNBQVM7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztRQUVPLDZCQUE2QixDQUFDLE9BQWdD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
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlnc2hhcmVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0ZpZ3NoYXJlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBNkc7QUFDN0csdURBQXVEO0FBQ3ZELHFEQUEyRjtBQUMzRixnREFBc0Q7QUFDdEQsaURBQWlIO0FBQ2pILG1EQUF5RDtBQUN6RCw2Q0FBa0Y7QUFDbEYscURBQW9FO0FBQ3BFLGlEQUF1RDtBQUN2RCxtREFBeUQ7QUFDekQsbURBQTZEO0FBQzdELHVEQUF5RDtBQUN6RCxtREFNK0I7QUFDL0IsNkNBQXVGO0FBQ3ZGLGtFQUErRDtBQWMvRCxJQUFpQixRQUFRLENBNlR4QjtBQTdURCxXQUFpQixRQUFRO0lBQ3ZCLE1BQWEsZUFBZ0IsU0FBUSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ3JDLGdCQUFnQixHQUFhO1lBQzlDLDZCQUE2QjtZQUM3Qiw4QkFBOEI7WUFDOUIsdUJBQXVCO1lBQ3ZCLDhCQUE4QjtZQUM5Qiw0QkFBNEI7WUFDNUIsa0JBQWtCO1lBQ2xCLDhCQUE4QjtZQUM5QiwwREFBMEQ7WUFDMUQsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCxZQUFZO1lBQ1osYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixXQUFXO1lBQ1gsd0JBQXdCO1lBQ3hCLE1BQU07WUFDTix3QkFBd0I7WUFDeEIsb0JBQW9CO1lBQ3BCLHdCQUF3QjtZQUN4QixpQkFBaUI7WUFDakIsZUFBZTtTQUNoQixDQUFDO1FBRU0sVUFBVSxDQUFVO1FBRXBCLFNBQVM7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQy9ELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztRQUVPLDZCQUE2QixD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
|