@researchdatabox/redbox-core 5.0.4-beta.12498 → 5.0.5
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/session.config.d.ts +2 -2
- package/dist/config/session.config.d.ts.map +1 -1
- 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/middleware/redboxSession.d.ts.map +1 -1
- package/dist/middleware/redboxSession.js +15 -3
- 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 +12 -71
- package/dist/services/BrandingThemeTokens.d.ts.map +1 -1
- package/dist/services/BrandingThemeTokens.js +2 -1
- 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 +2 -2
- package/dist/waterline-models/User.d.ts.map +1 -1
- package/dist/waterline-models/User.js +17 -12
- 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
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mirrorManagedAssets = mirrorManagedAssets;
|
|
4
|
+
exports.cleanupProjection = cleanupProjection;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const types_1 = require("./types");
|
|
7
|
+
const plan_1 = require("./plan");
|
|
8
|
+
const assets_1 = require("./assets");
|
|
9
|
+
const runtime_1 = require("./runtime");
|
|
10
|
+
const execution_1 = require("./execution");
|
|
11
|
+
const identity_1 = require("./identity");
|
|
12
|
+
const available = (status) => ['available', 'completed'].includes(String(status ?? '').toLowerCase());
|
|
13
|
+
/** Only receipts confer deletion authority; a filename never does. */
|
|
14
|
+
async function mirrorManagedAssets(client, config, record, articleId, state, checkpoint) {
|
|
15
|
+
const selected = (0, plan_1.getSelectedDataLocations)(config, record);
|
|
16
|
+
const hosted = selected.filter(e => e.type === 'attachment' || typeof e.figshareReceipt === 'string');
|
|
17
|
+
const links = config.assets.enableHostedFiles && hosted.length ? [] : selected.filter(e => e.type === 'url' && !e.ignore && !e.figshareReceipt);
|
|
18
|
+
const desired = new Set();
|
|
19
|
+
let files = await (0, runtime_1.listArticleFiles)(client, articleId);
|
|
20
|
+
for (const entry of hosted) {
|
|
21
|
+
if (!config.assets.enableHostedFiles)
|
|
22
|
+
continue;
|
|
23
|
+
if (typeof entry.figshareReceipt === 'string') {
|
|
24
|
+
const receipt = state.receipts.find(r => r.key === entry.figshareReceipt && r.articleId === articleId && r.state === 'available');
|
|
25
|
+
if (!receipt || !files.some(f => String(f.id) === receipt.fileId && available(f.status)))
|
|
26
|
+
throw new execution_1.FigshareRepairRequired('Hosted file reference has no verified receipt');
|
|
27
|
+
desired.add(receipt.key);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const localId = String(entry.fileId ?? '');
|
|
31
|
+
const name = String(entry.name ?? '');
|
|
32
|
+
if (!localId || !name)
|
|
33
|
+
throw new Error('Selected attachment is missing its ID or name');
|
|
34
|
+
// Read before staging, so a concurrent rewrite can only make the recorded fingerprint stale (forcing a re-hash),
|
|
35
|
+
// never pair a new fingerprint with old content.
|
|
36
|
+
const fingerprint = await (0, assets_1.getAttachmentFingerprint)(record.redboxOid, localId);
|
|
37
|
+
const unchanged = fingerprint && state.receipts.find(r => r.kind === 'hosted' && r.localId === localId && r.fingerprint === fingerprint && r.articleId === articleId && r.state === 'available');
|
|
38
|
+
if (unchanged && files.some(f => String(f.id) === unchanged.fileId && available(f.status) && Number(f.size) === unchanged.size)) {
|
|
39
|
+
desired.add(unchanged.key);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const disk = (0, assets_1.getStagingDisk)(config);
|
|
43
|
+
const stagingKey = (0, assets_1.buildStagingKey)(config, articleId, record.redboxOid, localId, name);
|
|
44
|
+
try {
|
|
45
|
+
const size = await (0, assets_1.stageAttachmentToDisk)(disk, stagingKey, await (0, assets_1.getAttachmentStream)(record.redboxOid, localId));
|
|
46
|
+
const hash = (0, node_crypto_1.createHash)('sha256');
|
|
47
|
+
const md5Hash = (0, node_crypto_1.createHash)('md5');
|
|
48
|
+
for await (const chunk of await disk.getStream(stagingKey)) {
|
|
49
|
+
hash.update(chunk);
|
|
50
|
+
md5Hash.update(chunk);
|
|
51
|
+
}
|
|
52
|
+
const md5 = md5Hash.digest('hex');
|
|
53
|
+
const digest = hash.digest('hex');
|
|
54
|
+
const key = (0, node_crypto_1.createHash)('sha256').update(`${localId}:${digest}:${size}`).digest('hex');
|
|
55
|
+
desired.add(key);
|
|
56
|
+
let receipt = state.receipts.find(r => r.key === key);
|
|
57
|
+
if (receipt?.state === 'removed')
|
|
58
|
+
receipt = undefined;
|
|
59
|
+
let resumeFileId;
|
|
60
|
+
if (receipt) {
|
|
61
|
+
const remote = files.find(f => String(f.id) === receipt.fileId);
|
|
62
|
+
if (remote && available(remote.status) && Number(remote.size) === size) {
|
|
63
|
+
const verified = receipt;
|
|
64
|
+
state = await checkpoint(s => {
|
|
65
|
+
const target = s.receipts.find(r => r.key === verified.key);
|
|
66
|
+
target.state = 'available';
|
|
67
|
+
target.completedAt = new Date().toISOString();
|
|
68
|
+
target.downloadUrl = remote.download_url;
|
|
69
|
+
target.desired = true;
|
|
70
|
+
if (fingerprint)
|
|
71
|
+
target.fingerprint = fingerprint;
|
|
72
|
+
});
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
// Only an explicit operator decision, made after stopping the old uploader,
|
|
76
|
+
// permits resuming an interrupted multipart upload.
|
|
77
|
+
if (receipt.resumeApproved && receipt.fileId && receipt.state === 'uploading' && remote)
|
|
78
|
+
resumeFileId = receipt.fileId;
|
|
79
|
+
else {
|
|
80
|
+
if (['initialising', 'uploading'].includes(receipt.state))
|
|
81
|
+
throw new execution_1.FigshareRepairRequired('Interrupted upload requires reconciliation before another initialisation');
|
|
82
|
+
if (receipt.state === 'completing' && remote)
|
|
83
|
+
throw new execution_1.FigshareWaiting('uploads');
|
|
84
|
+
throw new execution_1.FigshareRepairRequired('Managed remote file is missing or no longer matches its receipt');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
let location;
|
|
88
|
+
let fileId;
|
|
89
|
+
if (resumeFileId) {
|
|
90
|
+
location = `${config.connection.baseUrl.replace(/\/+$/, '')}/account/articles/${articleId}/files/${resumeFileId}`;
|
|
91
|
+
fileId = resumeFileId;
|
|
92
|
+
state = await checkpoint(s => { s.receipts.find(r => r.key === key).resumeApproved = false; });
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
receipt = { key, localId, digest, md5, size, name, articleId, kind: 'hosted', state: 'initialising', desired: true };
|
|
96
|
+
const created = receipt;
|
|
97
|
+
state = await checkpoint(s => { s.receipts = s.receipts.filter(r => r.key !== key); s.receipts.push(created); });
|
|
98
|
+
const init = await client.createArticleFile(articleId, { name, size, md5 });
|
|
99
|
+
const remoteId = String(init.entity_id ?? init.id ?? /\/files\/(\d+)(?:$|\?)/.exec(init.location)?.[1] ?? '');
|
|
100
|
+
if (remoteId) {
|
|
101
|
+
fileId = remoteId;
|
|
102
|
+
state = await checkpoint(s => { s.receipts.find(r => r.key === key).fileId = remoteId; });
|
|
103
|
+
}
|
|
104
|
+
location = init.location;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
const descriptor = await client.getLocation(location);
|
|
108
|
+
const uploadFileId = String(descriptor.id);
|
|
109
|
+
fileId = uploadFileId;
|
|
110
|
+
state = await checkpoint(s => { Object.assign(s.receipts.find(r => r.key === key), { fileId: uploadFileId, state: 'uploading' }); });
|
|
111
|
+
const parts = (await client.getLocation(descriptor.upload_url)).parts ?? [];
|
|
112
|
+
const source = await disk.getStream(stagingKey);
|
|
113
|
+
try {
|
|
114
|
+
for await (const part of (0, assets_1.readPartsSequentially)(source, parts)) {
|
|
115
|
+
if (resumeFileId && ['COMPLETE', 'COMPLETED'].includes(String(parts.find(p => p.partNo === part.partNo)?.status).toUpperCase())) {
|
|
116
|
+
for await (const _chunk of part.stream) { /* advance through the confirmed part */ }
|
|
117
|
+
}
|
|
118
|
+
else
|
|
119
|
+
await client.uploadFilePart(descriptor.upload_url, part.partNo, part.stream);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
source.destroy();
|
|
124
|
+
}
|
|
125
|
+
state = await checkpoint(s => { s.receipts.find(r => r.key === key).state = 'completing'; });
|
|
126
|
+
await client.completeFileUpload(articleId, uploadFileId);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
// This worker has stopped uploading and, if its lease-checked checkpoint succeeds, no successor can have
|
|
130
|
+
// started, so its own interrupted upload may resume on retry. A lost lease leaves the decision to an operator.
|
|
131
|
+
const interrupted = fileId;
|
|
132
|
+
if (interrupted)
|
|
133
|
+
state = await checkpoint(s => { Object.assign(s.receipts.find(r => r.key === key), { fileId: interrupted, state: 'uploading', resumeApproved: true }); });
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
files = await (0, runtime_1.listArticleFiles)(client, articleId);
|
|
137
|
+
const remote = files.find(f => String(f.id) === fileId);
|
|
138
|
+
if (!remote || !available(remote.status))
|
|
139
|
+
throw new execution_1.FigshareWaiting('uploads');
|
|
140
|
+
if (Number(remote.size) !== size)
|
|
141
|
+
throw new execution_1.FigshareRepairRequired('Uploaded file size does not match staged content');
|
|
142
|
+
state = await checkpoint(s => { Object.assign(s.receipts.find(r => r.key === key), { state: 'available', completedAt: new Date().toISOString(), downloadUrl: remote.download_url, ...(fingerprint ? { fingerprint } : {}) }); });
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
// Only temporary staging objects are removed. Source attachment bytes remain.
|
|
146
|
+
await disk.delete(stagingKey);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
for (const entry of links) {
|
|
150
|
+
if (!config.assets.enableLinkFiles)
|
|
151
|
+
continue;
|
|
152
|
+
const link = String(entry.location ?? '');
|
|
153
|
+
if (!/^https?:\/\//i.test(link))
|
|
154
|
+
throw new Error('Selected Figshare link must use HTTP or HTTPS');
|
|
155
|
+
const key = (0, node_crypto_1.createHash)('sha256').update(`link:${link}`).digest('hex');
|
|
156
|
+
desired.add(key);
|
|
157
|
+
const receipt = state.receipts.find(r => r.key === key && r.state !== 'removed');
|
|
158
|
+
if (receipt) {
|
|
159
|
+
if (!receipt.fileId || !files.some(f => String(f.id) === receipt.fileId))
|
|
160
|
+
throw new execution_1.FigshareRepairRequired('Uncertain linked file initialisation requires repair');
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
// A legacy-created link has no receipt, so it is reused but never adopted for deletion.
|
|
164
|
+
if (files.some(f => f.is_link_only === true && f.download_url === link))
|
|
165
|
+
continue;
|
|
166
|
+
state = await checkpoint(s => {
|
|
167
|
+
s.receipts = s.receipts.filter(r => r.key !== key);
|
|
168
|
+
s.receipts.push({ key, localId: link, digest: key, size: 0, name: link, articleId, link, kind: 'link', state: 'initialising', desired: true });
|
|
169
|
+
});
|
|
170
|
+
const init = await client.createArticleFile(articleId, { link });
|
|
171
|
+
const fileId = String(init.entity_id ?? init.id ?? /\/files\/(\d+)(?:$|\?)/.exec(init.location)?.[1] ?? '');
|
|
172
|
+
if (!fileId)
|
|
173
|
+
throw new execution_1.FigshareRepairRequired('Linked file response did not identify the created file');
|
|
174
|
+
state = await checkpoint(s => { Object.assign(s.receipts.find(r => r.key === key), { fileId, state: 'available', completedAt: new Date().toISOString() }); });
|
|
175
|
+
}
|
|
176
|
+
for (const receipt of state.receipts) {
|
|
177
|
+
if (desired.has(receipt.key) || receipt.state === 'removed')
|
|
178
|
+
continue;
|
|
179
|
+
if (!receipt.fileId || !['available', 'deleting'].includes(receipt.state))
|
|
180
|
+
throw new execution_1.FigshareRepairRequired('Unresolved managed upload cannot be deleted');
|
|
181
|
+
state = await checkpoint(s => { Object.assign(s.receipts.find(r => r.key === receipt.key), { desired: false, state: 'deleting' }); });
|
|
182
|
+
if (files.some(f => String(f.id) === receipt.fileId))
|
|
183
|
+
await client.deleteArticleFile(articleId, receipt.fileId);
|
|
184
|
+
state = await checkpoint(s => { s.receipts.find(r => r.key === receipt.key).state = 'removed'; });
|
|
185
|
+
}
|
|
186
|
+
state = await checkpoint(s => {
|
|
187
|
+
for (const receipt of s.receipts)
|
|
188
|
+
receipt.desired = desired.has(receipt.key);
|
|
189
|
+
s.checkpoints.assets = (0, node_crypto_1.createHash)('sha256').update([...desired].sort().join(':')).digest('hex');
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
async function cleanupProjection(client, config, record, article, state) {
|
|
193
|
+
if (!(0, identity_1.observedPublished)(article) || article.is_embargoed === true || !client.getPublicArticle)
|
|
194
|
+
throw new execution_1.FigshareWaiting('replacement_access');
|
|
195
|
+
const publicArticle = await client.getPublicArticle(String(article.id));
|
|
196
|
+
const publicFiles = Array.isArray(publicArticle.files) ? publicArticle.files : [];
|
|
197
|
+
const entries = ((0, types_1.getRecordField)(record, config.record.dataLocationsPath) ?? []);
|
|
198
|
+
let pending = false;
|
|
199
|
+
const replacements = [];
|
|
200
|
+
for (const entry of entries) {
|
|
201
|
+
if (entry.type !== 'attachment') {
|
|
202
|
+
replacements.push(entry);
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
const receipt = state.receipts.find(r => r.localId === entry.fileId && r.articleId === String(article.id) && r.desired && r.state === 'available');
|
|
206
|
+
if (!receipt) {
|
|
207
|
+
replacements.push(entry);
|
|
208
|
+
continue;
|
|
209
|
+
} // Unmanaged/unselected local attachments are retained.
|
|
210
|
+
const remote = publicFiles.find(f => String(f.id) === receipt.fileId && Number(f.size) === receipt.size);
|
|
211
|
+
if (!remote || typeof remote.download_url !== 'string' || !/^https?:\/\//.test(remote.download_url)) {
|
|
212
|
+
pending = true;
|
|
213
|
+
replacements.push(entry);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const source = await (0, assets_1.getAttachmentStream)(record.redboxOid, String(entry.fileId));
|
|
217
|
+
const digest = (0, node_crypto_1.createHash)('sha256');
|
|
218
|
+
for await (const chunk of source.readstream)
|
|
219
|
+
digest.update(chunk);
|
|
220
|
+
if (digest.digest('hex') !== receipt.digest)
|
|
221
|
+
throw new execution_1.FigshareWaiting('newer_sync');
|
|
222
|
+
replacements.push({ ...entry, type: 'url', location: remote.download_url, originalFileName: receipt.name, ignore: true,
|
|
223
|
+
figshareReceipt: receipt.key, localBytesRetained: true });
|
|
224
|
+
}
|
|
225
|
+
if (pending)
|
|
226
|
+
throw new execution_1.FigshareWaiting('replacement_access');
|
|
227
|
+
return replacements;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZC1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZmlnc2hhcmUtdjIvbWFuYWdlZC1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsa0RBNElDO0FBRUQsOENBc0JDO0FBcExELDZDQUF5QztBQUt6QyxtQ0FBeUM7QUFDekMsaUNBQWtEO0FBQ2xELHFDQUF3SjtBQUN4Six1Q0FBNkM7QUFDN0MsMkNBQXNFO0FBQ3RFLHlDQUErQztBQUcvQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQWUsRUFBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUV4SCxzRUFBc0U7QUFDL0QsS0FBSyxVQUFVLG1CQUFtQixDQUFDLE1BQXNCLEVBQUUsTUFBb0MsRUFBRSxNQUFtQixFQUFFLFNBQWlCLEVBQUUsS0FBd0IsRUFBRSxVQUEyQjtJQUNuTSxNQUFNLFFBQVEsR0FBRyxJQUFBLCtCQUF3QixFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENB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QUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQUUsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoSCxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBRSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBQ0QsS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNCLEtBQUssTUFBTSxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVE7WUFBRSxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUEsd0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAC;AAErH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAiBvH;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,uBAAuB,CA0B9K"}
|
|
@@ -3,14 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getSelectedDataLocations = getSelectedDataLocations;
|
|
4
4
|
exports.preparePublication = preparePublication;
|
|
5
5
|
const types_1 = require("./types");
|
|
6
|
-
const config_1 = require("./config");
|
|
7
6
|
function getSelectedDataLocations(config, record) {
|
|
8
7
|
const dataLocations = ((0, types_1.getRecordField)(record, config.record.dataLocationsPath) ?? []);
|
|
9
8
|
return dataLocations.filter((entry) => {
|
|
10
9
|
if (entry == null || typeof entry !== 'object') {
|
|
11
10
|
return false;
|
|
12
11
|
}
|
|
13
|
-
if (entry.type === 'attachment') {
|
|
12
|
+
if (entry.type === 'attachment' || typeof entry.figshareReceipt === 'string') {
|
|
14
13
|
return config.selection.attachmentMode === 'all' || entry[config.selection.selectedFlagPath] === true;
|
|
15
14
|
}
|
|
16
15
|
if (entry.type === 'url') {
|
|
@@ -22,10 +21,6 @@ function getSelectedDataLocations(config, record) {
|
|
|
22
21
|
function preparePublication(config, record, existingState, correlationId) {
|
|
23
22
|
const sameJob = existingState.lockOwner === correlationId;
|
|
24
23
|
const existingArticleId = (0, types_1.getRecordField)(record, config.record.articleIdPath);
|
|
25
|
-
if (!sameJob && (existingState.status === 'syncing' || existingState.status === 'awaiting_upload_completion')) {
|
|
26
|
-
sails.log.warn(`FigService v2 - skipping duplicate sync for record ${record.redboxOid ?? record.id}`);
|
|
27
|
-
return { action: 'skip', articleId: existingArticleId ? String(existingArticleId) : undefined, sameJob: false, syncState: existingState };
|
|
28
|
-
}
|
|
29
24
|
const hasArticleId = existingArticleId != null && existingArticleId !== '';
|
|
30
25
|
const action = !hasArticleId
|
|
31
26
|
? 'create'
|
|
@@ -35,12 +30,10 @@ function preparePublication(config, record, existingState, correlationId) {
|
|
|
35
30
|
const syncState = {
|
|
36
31
|
...existingState,
|
|
37
32
|
status: 'syncing',
|
|
38
|
-
lockOwner: correlationId,
|
|
39
33
|
correlationId,
|
|
40
34
|
lastError: '',
|
|
41
35
|
lastSyncAt: new Date().toISOString()
|
|
42
36
|
};
|
|
43
|
-
(0, config_1.setSyncState)(config, record, syncState);
|
|
44
37
|
return {
|
|
45
38
|
action,
|
|
46
39
|
articleId: hasArticleId ? String(existingArticleId) : undefined,
|
|
@@ -48,4 +41,4 @@ function preparePublication(config, record, existingState, correlationId) {
|
|
|
48
41
|
syncState
|
|
49
42
|
};
|
|
50
43
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9wbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsNERBaUJDO0FBRUQsZ0RBMEJDO0FBL0NELG1DQUFxSDtBQUVySCxTQUFnQix3QkFBd0IsQ0FBQyxNQUFvQyxFQUFFLE1BQW1CO0lBQ2hHLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBQSxzQkFBYyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUF3QixDQUFDO0lBQzdHLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3BDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLE9BQU8sS0FBSyxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3RSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksQ0FBQztRQUN4RyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ2pHLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLE1BQW9DLEVBQUUsTUFBbUIsRUFBRSxhQUFnQyxFQUFFLGFBQXFCO0lBQ25KLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDO0lBQzFELE1BQU0saUJBQWlCLEdBQUcsSUFBQSxzQkFBYyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixJQUFJLElBQUksSUFBSSxpQkFBaUIsS0FBSyxFQUFFLENBQUM7SUFDM0UsTUFBTSxNQUFNLEdBQUcsQ0FBQyxZQUFZO1FBQzFCLENBQUMsQ0FBQyxRQUFRO1FBQ1YsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1lBQzNILENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUVmLE1BQU0sU0FBUyxHQUFzQjtRQUNuQyxHQUFHLGFBQWE7UUFDaEIsTUFBTSxFQUFFLFNBQVM7UUFFakIsYUFBYTtRQUNiLFNBQVMsRUFBRSxFQUFFO1FBQ2IsVUFBVSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO0tBQ3JDLENBQUM7SUFHRixPQUFPO1FBQ0wsTUFBTTtRQUNOLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQy9ELE9BQU87UUFDUCxTQUFTO0tBQ1YsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAErF,OAAO,EAAE,oCAAoC,EAAgB,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAmB,cAAc,EAAqB,MAAM,QAAQ,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElH,eAAO,MAAM,iBAAiB,yFAAoF,CAAC;AACnH,eAAO,MAAM,qBAAqB,qDAAsE,CAAC;AAEzG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,4BAA4B,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CASxG;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBzG;AAED,wBAAsB,4BAA4B,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3G;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oCAAoC,EAAE,UAAU,EAAE,kBAAkB,yGAM5G;AAoBD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,oCAAoC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAcjJ;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,oCAAoC,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC,CAcvM"}
|
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.FigshareRunContextTag = exports.FigshareConfigTag = void 0;
|
|
4
37
|
exports.isCurationLocked = isCurationLocked;
|
|
@@ -8,11 +41,11 @@ exports.makeRuntimeLayer = makeRuntimeLayer;
|
|
|
8
41
|
exports.runBuildMetadataPayload = runBuildMetadataPayload;
|
|
9
42
|
exports.runSyncMetadataProgram = runSyncMetadataProgram;
|
|
10
43
|
const effect_1 = require("effect");
|
|
44
|
+
const Cause = __importStar(require("effect/Cause"));
|
|
11
45
|
const RBValidationError_1 = require("../../model/RBValidationError");
|
|
12
46
|
const config_1 = require("./config");
|
|
13
47
|
const http_1 = require("./http");
|
|
14
48
|
const metadata_1 = require("./metadata");
|
|
15
|
-
const runtime_1 = require("../integration-v2/runtime");
|
|
16
49
|
exports.FigshareConfigTag = effect_1.Context.GenericTag('redbox/FigshareConfig');
|
|
17
50
|
exports.FigshareRunContextTag = effect_1.Context.GenericTag('redbox/FigshareRunContext');
|
|
18
51
|
function isCurationLocked(config, article) {
|
|
@@ -44,35 +77,49 @@ async function listArticleFiles(client, articleId) {
|
|
|
44
77
|
}
|
|
45
78
|
async function ensureNoFileUploadInProgress(client, articleId) {
|
|
46
79
|
const files = await listArticleFiles(client, articleId);
|
|
47
|
-
const inProgress = files.some(entry => String(entry.status ?? '').toLowerCase() === 'created');
|
|
80
|
+
const inProgress = files.some((entry) => String(entry.status ?? '').toLowerCase() === 'created');
|
|
48
81
|
if (inProgress) {
|
|
49
82
|
throw new RBValidationError_1.RBValidationError({
|
|
50
83
|
message: `Figshare file uploads are still in progress for article '${articleId}'`,
|
|
51
|
-
displayErrors: [
|
|
52
|
-
{
|
|
84
|
+
displayErrors: [{
|
|
53
85
|
title: 'Figshare file uploads are still in progress',
|
|
54
|
-
detail: `Figshare file uploads are still in progress for article '${articleId}'
|
|
55
|
-
}
|
|
56
|
-
],
|
|
86
|
+
detail: `Figshare file uploads are still in progress for article '${articleId}'`
|
|
87
|
+
}]
|
|
57
88
|
});
|
|
58
89
|
}
|
|
59
90
|
}
|
|
60
91
|
function makeRuntimeLayer(config, runContext) {
|
|
61
92
|
return effect_1.Layer.mergeAll(effect_1.Layer.succeed(exports.FigshareConfigTag, config), effect_1.Layer.succeed(exports.FigshareRunContextTag, runContext), (0, http_1.makeClientLayer)(config, runContext));
|
|
62
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Run an Effect program without replacing domain/HTTP failures with Effect's
|
|
96
|
+
* FiberFailure wrapper. The original error carries Figshare statusCode,
|
|
97
|
+
* responseBody and cause fields used by the integration audit and UI.
|
|
98
|
+
*/
|
|
99
|
+
async function runProgram(program) {
|
|
100
|
+
const exit = await effect_1.Effect.runPromiseExit(program);
|
|
101
|
+
if (exit._tag === 'Success') {
|
|
102
|
+
return exit.value;
|
|
103
|
+
}
|
|
104
|
+
const failure = Cause.failureOrCause(exit.cause);
|
|
105
|
+
if (failure._tag === 'Left') {
|
|
106
|
+
throw failure.left;
|
|
107
|
+
}
|
|
108
|
+
throw Cause.squash(failure.right);
|
|
109
|
+
}
|
|
63
110
|
async function runBuildMetadataPayload(config, record) {
|
|
64
111
|
const runContext = {
|
|
65
112
|
recordOid: record.redboxOid ?? record.id ?? '',
|
|
66
113
|
brandId: String(record.metaMetadata?.brandId ?? 'default'),
|
|
67
114
|
brandName: (0, config_1.getBrandName)(record),
|
|
68
115
|
correlationId: `build-${Date.now()}`,
|
|
69
|
-
triggerSource: 'buildMetadataPayload'
|
|
116
|
+
triggerSource: 'buildMetadataPayload'
|
|
70
117
|
};
|
|
71
118
|
const program = effect_1.Effect.gen(function* () {
|
|
72
119
|
const client = yield* http_1.FigshareClientTag;
|
|
73
120
|
return yield* effect_1.Effect.promise(() => (0, metadata_1.buildMetadataPayload)(config, record, client));
|
|
74
121
|
}).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
|
|
75
|
-
return (
|
|
122
|
+
return runProgram(program);
|
|
76
123
|
}
|
|
77
124
|
async function runSyncMetadataProgram(config, runContext, record, plan) {
|
|
78
125
|
const program = effect_1.Effect.gen(function* () {
|
|
@@ -86,6 +133,6 @@ async function runSyncMetadataProgram(config, runContext, record, plan) {
|
|
|
86
133
|
}
|
|
87
134
|
return yield* effect_1.Effect.promise(() => (0, metadata_1.syncMetadataPhase)(client, config, record, plan));
|
|
88
135
|
}).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
|
|
89
|
-
return (
|
|
136
|
+
return runProgram(program);
|
|
90
137
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLDRDQVNDO0FBRUQsNENBZ0JDO0FBRUQsb0VBWUM7QUFFRCw0Q0FNQztBQW9CRCwwREFjQztBQUVELHdEQWNDO0FBL0dELG1DQUFnRDtBQUNoRCxvREFBc0M7QUFFdEMscUVBQWtFO0FBQ2xFLHFDQUE4RTtBQUM5RSxpQ0FBNEU7QUFDNUUseUNBQXFFO0FBR3hELFFBQUEsaUJBQWlCLEdBQUcsZ0JBQU8sQ0FBQyxVQUFVLENBQXVDLHVCQUF1QixDQUFDLENBQUM7QUFDdEcsUUFBQSxxQkFBcUIsR0FBRyxnQkFBTyxDQUFDLFVBQVUsQ0FBcUIsMkJBQTJCLENBQUMsQ0FBQztBQUV6RyxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFvQyxFQUFFLE9BQXdCO0lBQzdGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO0lBQ3BELE1BQU0sV0FBVyxHQUFHLFlBQVksRUFBRSxXQUFXLElBQUksUUFBUSxDQUFDO0lBQzFELE1BQU0sZUFBZSxHQUFHLFlBQVksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDO0lBQ3ZELElBQUksQ0FBQyxlQUFlLElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzNDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFFLE9BQW1DLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssV0FBVyxDQUFDO0FBQ3pGLENBQUM7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsTUFBc0IsRUFBRSxTQUFpQjtJQUM5RSxNQUFNLEtBQUssR0FBbUIsRUFBRSxDQUFDO0lBQ2pDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxXQUFXLEdBQUcsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVELE1BQU07UUFDUixDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxNQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVNLEtBQUssVUFBVSw0QkFBNEIsQ0FBQyxNQUFzQixFQUFFLFNBQWlCO0lBQzFGLE1BQU0sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ2pHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLElBQUkscUNBQWlCLENBQUM7WUFDMUIsT0FBTyxFQUFFLDREQUE0RCxTQUFTLEdBQUc7WUFDakYsYUFBYSxFQUFFLENBQUM7b0JBQ2QsS0FBSyxFQUFFLDZDQUE2QztvQkFDcEQsTUFBTSxFQUFFLDREQUE0RCxTQUFTLEdBQUc7aUJBQ2pGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLE1BQTRDLEVBQUUsVUFBOEI7SUFDM0csT0FBTyxjQUFLLENBQUMsUUFBUSxDQUNuQixjQUFLLENBQUMsT0FBTyxDQUFDLHlCQUFpQixFQUFFLE1BQU0sQ0FBQyxFQUN4QyxjQUFLLENBQUMsT0FBTyxDQUFDLDZCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUNoRCxJQUFBLHNCQUFlLEVBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUNwQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsVUFBVSxDQUFJLE9BQXlDO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLE1BQU0sZUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDNUIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFTSxLQUFLLFVBQVUsdUJBQXVCLENBQUMsTUFBNEMsRUFBRSxNQUFtQjtJQUM3RyxNQUFNLFVBQVUsR0FBdUI7UUFDckMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFO1FBQzlDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUksU0FBUyxDQUFDO1FBQzFELFNBQVMsRUFBRSxJQUFBLHFCQUFZLEVBQUMsTUFBTSxDQUFDO1FBQy9CLGFBQWEsRUFBRSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQyxhQUFhLEVBQUUsc0JBQXNCO0tBQ3RDLENBQUM7SUFDRixNQUFNLE9BQU8sR0FBRyxlQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyx3QkFBaUIsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQyxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBb0IsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRU0sS0FBSyxVQUFVLHNCQUFzQixDQUFDLE1BQTRDLEVBQUUsVUFBOEIsRUFBRSxNQUFtQixFQUFFLElBQTZCO0lBQzNLLE1BQU0sT0FBTyxHQUFHLGVBQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLHdCQUFpQixDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDO1lBQ0QsS0FBSyxDQUFDLENBQUMsZUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsZUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDRCQUFpQixFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixDQUFDIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RecordModel } from '../../model/storage/RecordModel';
|
|
2
|
+
import type { RecordWriteOptions } from '../../RecordWriteOptions';
|
|
3
|
+
import type { FigshareSourceRequest } from '../../model/storage/FigshareSyncModel';
|
|
4
|
+
export declare function evaluateSourceCondition(condition: string, oid: string, record: Record<string, unknown>, user?: unknown): boolean;
|
|
5
|
+
/** Inspect configured hooks after all pre hooks, so a failed save never queues work. */
|
|
6
|
+
export declare function prepareSourceIntent(record: Record<string, unknown>, recordType: unknown, events: string[], user: Record<string, unknown>, initialising: boolean, maintenance?: boolean): RecordWriteOptions['figshareIntent'];
|
|
7
|
+
/** Resolve the original policy ID against current hook configuration, without reauthorising as the service user. */
|
|
8
|
+
export declare function currentExecutionEligible(recordType: unknown, policies: FigshareSourceRequest[], oid: string, record: RecordModel): boolean;
|
|
9
|
+
//# sourceMappingURL=source-intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-intent.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/source-intent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAqCnF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAGhI;AACD,wFAAwF;AACxF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,UAAQ,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAqB3N;AAED,oHAAoH;AACpH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAW1I"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.evaluateSourceCondition = evaluateSourceCondition;
|
|
7
|
+
exports.prepareSourceIntent = prepareSourceIntent;
|
|
8
|
+
exports.currentExecutionEligible = currentExecutionEligible;
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
const config_1 = require("./config");
|
|
12
|
+
const syncHooks = new Set(['validateFigshareRecord', 'wakeFigshareRecord', 'createUpdateFigshareArticle', 'uploadFilesToFigshareArticle']);
|
|
13
|
+
const cleanupHooks = new Set(['requestFigshareCleanup', 'deleteFilesFromRedboxTrigger']);
|
|
14
|
+
const warnedRepeatedHooks = new Set();
|
|
15
|
+
/**
|
|
16
|
+
* Figshare hooks configured for one event phase. A default policy ID names the hook function, so reordering
|
|
17
|
+
* other hooks keeps queued work eligible; a repeated function adds its occurrence. `legacyId` is the earlier
|
|
18
|
+
* position-based default, still honoured for work queued before this change.
|
|
19
|
+
*/
|
|
20
|
+
function figshareHookPolicies(recordType, event, phase) {
|
|
21
|
+
const hooks = lodash_1.default.get(recordType, `hooks.${event}.${phase}`, []);
|
|
22
|
+
if (!Array.isArray(hooks))
|
|
23
|
+
return [];
|
|
24
|
+
const occurrences = new Map();
|
|
25
|
+
const policies = [];
|
|
26
|
+
for (const [index, hook] of hooks.entries()) {
|
|
27
|
+
const name = String(hook.function ?? '').split('.').pop() ?? '';
|
|
28
|
+
const kind = syncHooks.has(name) ? 'sync' : cleanupHooks.has(name) ? 'cleanup' : null;
|
|
29
|
+
if (!kind)
|
|
30
|
+
continue;
|
|
31
|
+
const options = hook.options ?? {};
|
|
32
|
+
const site = `${event}.${phase}.${name}`;
|
|
33
|
+
const occurrence = occurrences.get(site) ?? 0;
|
|
34
|
+
occurrences.set(site, occurrence + 1);
|
|
35
|
+
const legacyId = String(options.policyId ?? `${event}.${phase}.${index}`);
|
|
36
|
+
policies.push({ kind, options, site, legacyId, policyId: String(options.policyId ?? (occurrence ? `${site}.${occurrence}` : site)) });
|
|
37
|
+
}
|
|
38
|
+
for (const [site, count] of occurrences) {
|
|
39
|
+
if (count > 1 && policies.some(p => p.site === site && p.options.policyId == null) && !warnedRepeatedHooks.has(site)) {
|
|
40
|
+
warnedRepeatedHooks.add(site);
|
|
41
|
+
sails.log.warn(`Figshare hook ${site} is configured ${count} times; set options.policyId on each so reordering cannot exchange their queued work`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return policies;
|
|
45
|
+
}
|
|
46
|
+
function evaluateSourceCondition(condition, oid, record, user) {
|
|
47
|
+
if (!condition)
|
|
48
|
+
return true;
|
|
49
|
+
return lodash_1.default.template(condition, { imports: { _: lodash_1.default, oid, record, user: user ?? null } })().trim() === 'true';
|
|
50
|
+
}
|
|
51
|
+
/** Inspect configured hooks after all pre hooks, so a failed save never queues work. */
|
|
52
|
+
function prepareSourceIntent(record, recordType, events, user, initialising, maintenance = false) {
|
|
53
|
+
if (maintenance)
|
|
54
|
+
return undefined;
|
|
55
|
+
const config = (0, config_1.resolveFigsharePublishingConfig)(record, { requireToken: false });
|
|
56
|
+
if (!config?.processing?.enabled)
|
|
57
|
+
return undefined;
|
|
58
|
+
const intents = [];
|
|
59
|
+
let configured = false;
|
|
60
|
+
for (const event of events) {
|
|
61
|
+
for (const phase of ['pre', 'postSync', 'post']) {
|
|
62
|
+
for (const { kind, options, policyId } of figshareHookPolicies(recordType, event, phase)) {
|
|
63
|
+
configured = true;
|
|
64
|
+
const sourceCondition = String(options.triggerCondition ?? '');
|
|
65
|
+
const condition = String(options.executionCondition ?? sourceCondition);
|
|
66
|
+
if (/\buser\b/.test(condition))
|
|
67
|
+
throw new Error('Figshare hooks with requester conditions require a separate user-independent executionCondition');
|
|
68
|
+
if (evaluateSourceCondition(sourceCondition, String(record.redboxOid ?? ''), record, user)) {
|
|
69
|
+
intents.push({ kind, policyId, condition, requestedBy: String(user.username ?? user.id ?? 'unknown') });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!configured)
|
|
75
|
+
return undefined;
|
|
76
|
+
return { intents, requestedBy: String(user.username ?? user.id ?? 'unknown'), saveToken: (0, node_crypto_1.randomUUID)(), readiness: initialising ? 'initialising' : 'ready' };
|
|
77
|
+
}
|
|
78
|
+
/** Resolve the original policy ID against current hook configuration, without reauthorising as the service user. */
|
|
79
|
+
function currentExecutionEligible(recordType, policies, oid, record) {
|
|
80
|
+
for (const event of ['onCreate', 'onUpdate', 'onTransitionWorkflow']) {
|
|
81
|
+
for (const phase of ['pre', 'postSync', 'post']) {
|
|
82
|
+
for (const { kind, options, policyId, legacyId } of figshareHookPolicies(recordType, event, phase)) {
|
|
83
|
+
if (!policies.some(policy => (policy.policyId === policyId || policy.policyId === legacyId) && policy.kind === kind))
|
|
84
|
+
continue;
|
|
85
|
+
const condition = String(options.executionCondition ?? options.triggerCondition ?? '');
|
|
86
|
+
if (!/\buser\b/.test(condition) && evaluateSourceCondition(condition, oid, record))
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLWludGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9zb3VyY2UtaW50ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBeUNBLDBEQUdDO0FBRUQsa0RBcUJDO0FBR0QsNERBV0M7QUFqRkQsb0RBQXVCO0FBQ3ZCLDZDQUF5QztBQUl6QyxxQ0FBMkQ7QUFFM0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7QUFDM0ksTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7QUFDekYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0FBRzlDOzs7O0dBSUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLFVBQW1CLEVBQUUsS0FBYSxFQUFFLEtBQWE7SUFDN0UsTUFBTSxLQUFLLEdBQVksZ0JBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzlDLE1BQU0sUUFBUSxHQUFpRCxFQUFFLENBQUM7SUFDbEUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMs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
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IntegrationStatusSummary } from '../IntegrationAuditService';
|
|
2
|
+
/** Called only after the existing record-view access check. Never expose operation tokens or accounts. */
|
|
3
|
+
export declare function figshareLiveSummary(oid: string, record: Record<string, unknown>): Promise<IntegrationStatusSummary | null>;
|
|
4
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAK3E,0GAA0G;AAC1G,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAoBhI"}
|