@researchdatabox/redbox-core 5.1.0-beta.12573 → 5.1.0-beta.13939
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/browser/redoc-library-loader.cjs +20 -0
- package/browser/redoc-standalone.js +143 -0
- package/dist/CoreBase.d.ts +43 -0
- package/dist/CoreBase.d.ts.map +1 -0
- package/dist/CoreBase.js +101 -0
- package/dist/CoreController.d.ts +23 -31
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +142 -131
- package/dist/CoreService.d.ts +13 -33
- package/dist/CoreService.d.ts.map +1 -1
- package/dist/CoreService.js +69 -95
- package/dist/HarvestRunService.d.ts +9 -1
- package/dist/HarvestRunService.d.ts.map +1 -1
- package/dist/HarvestRunService.js +1 -1
- package/dist/RecordRouteForm.d.ts +49 -0
- package/dist/RecordRouteForm.d.ts.map +1 -0
- package/dist/RecordRouteForm.js +188 -0
- package/dist/RecordSaveResponse.d.ts +4 -0
- package/dist/RecordSaveResponse.d.ts.map +1 -1
- package/dist/RecordSaveResponse.js +3 -2
- package/dist/action-execution/executor.d.ts +1 -1
- package/dist/action-execution/executor.d.ts.map +1 -1
- package/dist/action-execution/executor.js +19 -20
- package/dist/action-execution/legacy-result.d.ts +1 -1
- package/dist/action-execution/legacy-result.d.ts.map +1 -1
- package/dist/action-execution/legacy-result.js +43 -10
- package/dist/action-execution/types.d.ts +3 -3
- package/dist/action-execution/types.d.ts.map +1 -1
- package/dist/api-routes/groups/harvest-runs.d.ts +1 -0
- package/dist/api-routes/groups/harvest-runs.d.ts.map +1 -1
- package/dist/api-routes/groups/harvest-runs.js +24 -3
- package/dist/api-routes/groups/records.d.ts.map +1 -1
- package/dist/api-routes/groups/records.js +30 -21
- package/dist/api-routes/groups/reports.d.ts.map +1 -1
- package/dist/api-routes/groups/reports.js +3 -2
- package/dist/api-routes/helpers.d.ts +1 -1
- package/dist/api-routes/helpers.d.ts.map +1 -1
- package/dist/api-routes/helpers.js +10 -6
- package/dist/api-routes/openapi.d.ts.map +1 -1
- package/dist/api-routes/openapi.js +15 -1
- package/dist/api-routes/request-extraction.js +2 -2
- package/dist/api-routes/schemas/common.d.ts.map +1 -1
- package/dist/api-routes/schemas/common.js +7 -2
- package/dist/api-routes/schemas/responses.d.ts +38 -12
- package/dist/api-routes/schemas/responses.d.ts.map +1 -1
- package/dist/api-routes/schemas/responses.js +11 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +13 -3
- package/dist/config/agendaQueue.config.d.ts +5 -0
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +29 -2
- package/dist/config/appConfigSecrets.config.d.ts +14 -0
- package/dist/config/appConfigSecrets.config.d.ts.map +1 -0
- package/dist/config/appConfigSecrets.config.js +8 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts +16 -3
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +1 -1
- package/dist/config/dompurify.config.d.ts.map +1 -1
- package/dist/config/dompurify.config.js +3 -2
- package/dist/config/harvestRuns.config.d.ts +7 -0
- package/dist/config/harvestRuns.config.d.ts.map +1 -1
- package/dist/config/harvestRuns.config.js +2 -1
- package/dist/config/http.config.d.ts +3 -2
- package/dist/config/http.config.d.ts.map +1 -1
- package/dist/config/http.config.js +108 -12
- package/dist/config/i18n.config.d.ts +3 -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 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -1
- package/dist/config/log.config.d.ts +33 -5
- package/dist/config/log.config.d.ts.map +1 -1
- package/dist/config/log.config.js +58 -54
- package/dist/config/record.config.d.ts +17 -0
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +7 -1
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +11 -2
- package/dist/config/session.config.d.ts +2 -2
- package/dist/config/session.config.d.ts.map +1 -1
- package/dist/config/solr.config.d.ts +8 -0
- package/dist/config/solr.config.d.ts.map +1 -1
- package/dist/config/solr.config.js +15 -2
- package/dist/config/storage.config.d.ts.map +1 -1
- package/dist/config/storage.config.js +9 -1
- package/dist/config/vocab.config.d.ts +1 -0
- package/dist/config/vocab.config.d.ts.map +1 -1
- package/dist/config/vocab.config.js +3 -3
- package/dist/config/webpack.config.d.ts.map +1 -1
- package/dist/config/webpack.config.js +23 -5
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +3 -2
- package/dist/configmodels/FigsharePublishing.d.ts +1 -1
- package/dist/controllers/ActionController.d.ts.map +1 -1
- package/dist/controllers/ActionController.js +8 -2
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +21 -2
- package/dist/controllers/DynamicAssetController.d.ts +9 -10
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +67 -53
- package/dist/controllers/EmailController.d.ts.map +1 -1
- package/dist/controllers/EmailController.js +32 -14
- package/dist/controllers/ExportController.d.ts +9 -0
- package/dist/controllers/ExportController.d.ts.map +1 -1
- package/dist/controllers/ExportController.js +154 -3
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
- package/dist/controllers/FormVocabularyController.js +62 -33
- package/dist/controllers/RecordAuditController.d.ts.map +1 -1
- package/dist/controllers/RecordAuditController.js +4 -2
- package/dist/controllers/RecordController.d.ts +4 -1
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +248 -114
- package/dist/controllers/ReportController.d.ts +1 -0
- package/dist/controllers/ReportController.d.ts.map +1 -1
- package/dist/controllers/ReportController.js +40 -12
- package/dist/controllers/TranslationController.d.ts.map +1 -1
- package/dist/controllers/TranslationController.js +56 -16
- package/dist/controllers/UserController.d.ts +3 -1
- package/dist/controllers/UserController.d.ts.map +1 -1
- package/dist/controllers/UserController.js +178 -76
- package/dist/controllers/VocabularyController.d.ts +0 -1
- package/dist/controllers/VocabularyController.d.ts.map +1 -1
- package/dist/controllers/VocabularyController.js +18 -16
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +2 -5
- package/dist/controllers/webservice/HarvestRunController.d.ts +1 -0
- package/dist/controllers/webservice/HarvestRunController.d.ts.map +1 -1
- package/dist/controllers/webservice/HarvestRunController.js +46 -2
- package/dist/controllers/webservice/IntegrationAuditController.d.ts +0 -1
- package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -1
- package/dist/controllers/webservice/IntegrationAuditController.js +13 -6
- package/dist/controllers/webservice/RecordController.d.ts +1 -1
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +13 -4
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ReportController.js +15 -10
- package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/UserManagementController.js +17 -8
- package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
- package/dist/controllers/webservice/VocabularyController.js +19 -13
- package/dist/form-config/generated-view-only.d.ts.map +1 -1
- package/dist/form-config/generated-view-only.js +12 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/loader/index.d.ts +1 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +56 -11
- package/dist/middleware/redboxSession.d.ts.map +1 -1
- package/dist/middleware/redboxSession.js +15 -3
- package/dist/middleware/requestChronicle.d.ts +14 -0
- package/dist/middleware/requestChronicle.d.ts.map +1 -0
- package/dist/middleware/requestChronicle.js +73 -0
- package/dist/model/BuildResponse.d.ts +7 -5
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/RBValidationError.d.ts +18 -5
- package/dist/model/RBValidationError.d.ts.map +1 -1
- package/dist/model/RBValidationError.js +56 -17
- package/dist/model/storage/ExportJobModel.d.ts +33 -0
- package/dist/model/storage/ExportJobModel.d.ts.map +1 -0
- package/dist/model/storage/ExportJobModel.js +3 -0
- package/dist/model/storage/HarvestRunModel.d.ts +20 -0
- package/dist/model/storage/HarvestRunModel.d.ts.map +1 -1
- package/dist/model/storage/HarvestRunModel.js +2 -1
- package/dist/model/storage/index.d.ts +2 -1
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +1 -1
- package/dist/policies/checkAuth.d.ts.map +1 -1
- package/dist/policies/checkAuth.js +3 -2
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +7 -2
- package/dist/policies/noCache.d.ts.map +1 -1
- package/dist/policies/noCache.js +4 -3
- package/dist/record-contract/record-contract-compiler.d.ts.map +1 -1
- package/dist/record-contract/record-contract-compiler.js +3 -19
- package/dist/record-contract/record-contract-context.d.ts +2 -0
- package/dist/record-contract/record-contract-context.d.ts.map +1 -1
- package/dist/record-contract/record-contract-context.js +1 -1
- package/dist/responses/notFound.d.ts.map +1 -1
- package/dist/responses/notFound.js +6 -1
- package/dist/responses/serverError.d.ts.map +1 -1
- package/dist/responses/serverError.js +13 -3
- package/dist/sails.d.ts +27 -17
- package/dist/sails.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.d.ts +11 -2
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +163 -51
- package/dist/services/AppConfigSecrets.d.ts +66 -0
- package/dist/services/AppConfigSecrets.d.ts.map +1 -0
- package/dist/services/AppConfigSecrets.js +396 -0
- package/dist/services/AppConfigService.d.ts +16 -1
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +283 -33
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
- package/dist/services/BrandingThemeCssService.js +32 -3
- package/dist/services/BrandingThemeTokens.d.ts.map +1 -1
- package/dist/services/BrandingThemeTokens.js +10 -1
- package/dist/services/ConfigService.d.ts +1 -0
- package/dist/services/ConfigService.d.ts.map +1 -1
- package/dist/services/ConfigService.js +24 -9
- package/dist/services/DomSanitizerService.d.ts.map +1 -1
- package/dist/services/DomSanitizerService.js +19 -6
- package/dist/services/EmailService.d.ts +10 -2
- package/dist/services/EmailService.d.ts.map +1 -1
- package/dist/services/EmailService.js +53 -53
- package/dist/services/ExportService.d.ts +62 -0
- package/dist/services/ExportService.d.ts.map +1 -0
- package/dist/services/ExportService.js +609 -0
- package/dist/services/FormVocabularyService.d.ts.map +1 -1
- package/dist/services/FormVocabularyService.js +14 -4
- package/dist/services/FormsService.d.ts +3 -0
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +10 -3
- package/dist/services/HarvestRunService.d.ts +23 -1
- package/dist/services/HarvestRunService.d.ts.map +1 -1
- package/dist/services/HarvestRunService.js +155 -22
- package/dist/services/I18nEntriesService.d.ts +5 -0
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +55 -3
- package/dist/services/NamedQueryService.d.ts +1 -0
- package/dist/services/NamedQueryService.d.ts.map +1 -1
- package/dist/services/NamedQueryService.js +67 -31
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +69 -83
- package/dist/services/RaidService.d.ts.map +1 -1
- package/dist/services/RaidService.js +45 -11
- package/dist/services/RecordSchemaService.d.ts +3 -1
- package/dist/services/RecordSchemaService.d.ts.map +1 -1
- package/dist/services/RecordSchemaService.js +2 -1
- package/dist/services/RecordValidationService.d.ts +3 -0
- package/dist/services/RecordValidationService.d.ts.map +1 -1
- package/dist/services/RecordValidationService.js +25 -5
- package/dist/services/RecordsService.d.ts +10 -1
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +194 -93
- package/dist/services/ReportsService.d.ts +1 -0
- package/dist/services/ReportsService.d.ts.map +1 -1
- package/dist/services/ReportsService.js +10 -9
- package/dist/services/RvaImportService.d.ts.map +1 -1
- package/dist/services/RvaImportService.js +6 -5
- package/dist/services/SolrSearchService.d.ts +7 -2
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +205 -81
- package/dist/services/StorageManagerService.d.ts +5 -0
- package/dist/services/StorageManagerService.d.ts.map +1 -1
- package/dist/services/StorageManagerService.js +4 -1
- package/dist/services/TriggerService.d.ts.map +1 -1
- package/dist/services/TriggerService.js +64 -56
- package/dist/services/UsersService.d.ts +13 -1
- package/dist/services/UsersService.d.ts.map +1 -1
- package/dist/services/UsersService.js +191 -257
- package/dist/services/VocabularyService.d.ts +11 -1
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +120 -24
- package/dist/services/doi-v2/http.d.ts +3 -2
- package/dist/services/doi-v2/http.d.ts.map +1 -1
- package/dist/services/doi-v2/http.js +38 -4
- package/dist/services/doi-v2/runtime.d.ts +4 -3
- package/dist/services/doi-v2/runtime.d.ts.map +1 -1
- package/dist/services/doi-v2/runtime.js +52 -17
- package/dist/services/figshare-v2/assets.d.ts +1 -1
- package/dist/services/figshare-v2/assets.d.ts.map +1 -1
- package/dist/services/figshare-v2/assets.js +1 -1
- package/dist/services/figshare-v2/http.d.ts +3 -2
- package/dist/services/figshare-v2/http.d.ts.map +1 -1
- package/dist/services/figshare-v2/http.js +38 -4
- package/dist/services/figshare-v2/observability.d.ts.map +1 -1
- package/dist/services/figshare-v2/observability.js +3 -3
- package/dist/services/figshare-v2/runtime.d.ts +4 -3
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +48 -13
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +8 -3
- package/dist/services/integration-v2/runtime.d.ts +1 -1
- package/dist/services/integration-v2/runtime.d.ts.map +1 -1
- package/dist/services/integration-v2/runtime.js +7 -7
- package/dist/services/oni-v2/audit.d.ts +3 -2
- package/dist/services/oni-v2/audit.d.ts.map +1 -1
- package/dist/services/oni-v2/audit.js +38 -4
- package/dist/services/oni-v2/bindings.d.ts +1 -1
- package/dist/services/oni-v2/bindings.d.ts.map +1 -1
- package/dist/services/oni-v2/bindings.js +37 -4
- package/dist/services/oni-v2/repository.d.ts +3 -2
- package/dist/services/oni-v2/repository.d.ts.map +1 -1
- package/dist/services/oni-v2/repository.js +42 -7
- package/dist/services/oni-v2/runtime.d.ts +5 -4
- package/dist/services/oni-v2/runtime.d.ts.map +1 -1
- package/dist/services/oni-v2/runtime.js +57 -19
- package/dist/services/oni-v2/templating.d.ts +4 -2
- package/dist/services/oni-v2/templating.d.ts.map +1 -1
- package/dist/services/oni-v2/templating.js +42 -7
- package/dist/services/raid-v2/audit.d.ts +1 -1
- package/dist/services/raid-v2/audit.d.ts.map +1 -1
- package/dist/services/raid-v2/audit.js +39 -5
- package/dist/services/raid-v2/errors.d.ts +9 -9
- package/dist/services/raid-v2/errors.js +44 -11
- package/dist/services/raid-v2/http.d.ts +1 -1
- package/dist/services/raid-v2/http.d.ts.map +1 -1
- package/dist/services/raid-v2/http.js +42 -8
- package/dist/services/raid-v2/logger.d.ts +1 -1
- package/dist/services/raid-v2/logger.d.ts.map +1 -1
- package/dist/services/raid-v2/logger.js +42 -8
- package/dist/services/raid-v2/mapping.d.ts +1 -1
- package/dist/services/raid-v2/mapping.d.ts.map +1 -1
- package/dist/services/raid-v2/mapping.js +41 -7
- package/dist/services/raid-v2/runtime.d.ts +1 -1
- package/dist/services/raid-v2/runtime.d.ts.map +1 -1
- package/dist/services/raid-v2/runtime.js +76 -34
- package/dist/services/raid-v2/tags.d.ts +8 -8
- package/dist/services/raid-v2/tags.d.ts.map +1 -1
- package/dist/services/raid-v2/tags.js +42 -9
- package/dist/services/record-hooks/coordinator.d.ts +11 -0
- package/dist/services/record-hooks/coordinator.d.ts.map +1 -1
- package/dist/services/record-hooks/coordinator.js +70 -6
- package/dist/storage/GridFSDriver.d.ts +16 -9
- package/dist/storage/GridFSDriver.d.ts.map +1 -1
- package/dist/storage/GridFSDriver.js +87 -33
- package/dist/storage/TusStorageManagerDataStore.d.ts +11 -1
- package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -1
- package/dist/storage/TusStorageManagerDataStore.js +190 -56
- package/dist/utilities/HarvestHistoryRetention.d.ts +17 -0
- package/dist/utilities/HarvestHistoryRetention.d.ts.map +1 -0
- package/dist/utilities/HarvestHistoryRetention.js +141 -0
- package/dist/utilities/HarvestRunIndexes.d.ts +12 -0
- package/dist/utilities/HarvestRunIndexes.d.ts.map +1 -0
- package/dist/utilities/HarvestRunIndexes.js +84 -0
- package/dist/utilities/PinoLoggerUtils.d.ts +9 -0
- package/dist/utilities/PinoLoggerUtils.d.ts.map +1 -0
- package/dist/utilities/PinoLoggerUtils.js +17 -0
- package/dist/utilities/RequestChronicle.d.ts +221 -0
- package/dist/utilities/RequestChronicle.d.ts.map +1 -0
- package/dist/utilities/RequestChronicle.js +770 -0
- package/dist/utilities/RequestChronicleContext.d.ts +6 -0
- package/dist/utilities/RequestChronicleContext.d.ts.map +1 -0
- package/dist/utilities/RequestChronicleContext.js +19 -0
- package/dist/utilities/RequestChronicleSettings.d.ts +29 -0
- package/dist/utilities/RequestChronicleSettings.d.ts.map +1 -0
- package/dist/utilities/RequestChronicleSettings.js +31 -0
- package/dist/utilities/TransactionUtils.d.ts +2 -1
- package/dist/utilities/TransactionUtils.d.ts.map +1 -1
- package/dist/utilities/TransactionUtils.js +1 -1
- package/dist/utilities/TranslationHtml.d.ts.map +1 -1
- package/dist/utilities/TranslationHtml.js +13 -5
- package/dist/utilities/VocabularyAdminAccess.d.ts +10 -0
- package/dist/utilities/VocabularyAdminAccess.d.ts.map +1 -0
- package/dist/utilities/VocabularyAdminAccess.js +42 -0
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +7 -2
- package/dist/visitor/context-variables.visitor.d.ts +1 -2
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +5 -1
- package/dist/visitor/related-object-data-inline.visitor.d.ts +1 -1
- package/dist/visitor/related-object-data-inline.visitor.d.ts.map +1 -1
- package/dist/visitor/related-object-data-inline.visitor.js +57 -23
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +4 -2
- package/dist/visitor/visitor-helpers.js +3 -3
- package/dist/visitor/vocab-inline.visitor.d.ts +1 -2
- package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
- package/dist/visitor/vocab-inline.visitor.js +1 -1
- package/dist/waterline-models/ExportJob.d.ts +38 -0
- package/dist/waterline-models/ExportJob.d.ts.map +1 -0
- package/dist/waterline-models/ExportJob.js +148 -0
- package/dist/waterline-models/HarvestRecordEvent.d.ts.map +1 -1
- package/dist/waterline-models/HarvestRecordEvent.js +3 -9
- package/dist/waterline-models/HarvestRun.d.ts +5 -1
- package/dist/waterline-models/HarvestRun.d.ts.map +1 -1
- package/dist/waterline-models/HarvestRun.js +13 -7
- package/dist/waterline-models/HarvestRunChunk.d.ts.map +1 -1
- package/dist/waterline-models/HarvestRunChunk.js +3 -7
- 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 +3 -3
- package/dist/waterline-models/index.d.ts +2 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +4 -1
- package/logfmt-transport.cjs +59 -0
- package/package.json +76 -45
- package/dist/Logger.d.ts +0 -16
- package/dist/Logger.d.ts.map +0 -1
- package/dist/Logger.js +0 -3
|
@@ -69,6 +69,12 @@ var Services;
|
|
|
69
69
|
jobBackendByName = new Map();
|
|
70
70
|
readyInitPromise;
|
|
71
71
|
queueInitialized = false;
|
|
72
|
+
queueInitPromise;
|
|
73
|
+
readySeen = false;
|
|
74
|
+
stopping = false;
|
|
75
|
+
startedAgendas = new WeakSet();
|
|
76
|
+
agendaBackends = new WeakMap();
|
|
77
|
+
completedStartupSchedules = new Set();
|
|
72
78
|
constructor() {
|
|
73
79
|
super();
|
|
74
80
|
}
|
|
@@ -80,11 +86,38 @@ var Services;
|
|
|
80
86
|
*/
|
|
81
87
|
async init() {
|
|
82
88
|
const that = this;
|
|
89
|
+
this.registerSailsHook('on', 'lower', async () => {
|
|
90
|
+
this.stopping = true;
|
|
91
|
+
const results = await Promise.allSettled(Object.values(this.agendas).map(async (agenda) => {
|
|
92
|
+
if (!agenda)
|
|
93
|
+
return;
|
|
94
|
+
// stop(false) also handles processors, but is a no-op for producer-only instances.
|
|
95
|
+
try {
|
|
96
|
+
await agenda.stop(false);
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
const backend = this.agendaBackends.get(agenda);
|
|
100
|
+
if (backend && backend.ownsConnection !== false)
|
|
101
|
+
await backend.disconnect();
|
|
102
|
+
}
|
|
103
|
+
}));
|
|
104
|
+
for (const result of results) {
|
|
105
|
+
if (result.status === 'rejected')
|
|
106
|
+
sails.log.error('AgendaQueue:: Shutdown failed:', result.reason);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
83
109
|
this.registerSailsHook('on', 'ready', async function () {
|
|
84
|
-
|
|
110
|
+
try {
|
|
111
|
+
await that.handleReady();
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
// Sails emits ready without awaiting async listeners.
|
|
115
|
+
sails.log.error('AgendaQueue:: Failed to initialize queue at Sails ready:', error);
|
|
116
|
+
}
|
|
85
117
|
});
|
|
86
118
|
}
|
|
87
119
|
async handleReady() {
|
|
120
|
+
this.readySeen = true;
|
|
88
121
|
if (_.isNil(this.readyInitPromise)) {
|
|
89
122
|
this.readyInitPromise = this.handleReadyInternal().catch((err) => {
|
|
90
123
|
this.readyInitPromise = undefined;
|
|
@@ -96,7 +129,26 @@ var Services;
|
|
|
96
129
|
async handleReadyInternal() {
|
|
97
130
|
if (process.env.REDBOX_FIGSHARE_ADMIN === 'true')
|
|
98
131
|
return;
|
|
99
|
-
this.
|
|
132
|
+
await this.ensureQueueInitialized();
|
|
133
|
+
if (this.stopping)
|
|
134
|
+
throw new Error('AgendaQueue:: Queue is shutting down.');
|
|
135
|
+
const activeAgendas = Object.values(this.agendas).filter((agenda) => !_.isNil(agenda));
|
|
136
|
+
const results = await Promise.allSettled(activeAgendas.map(async (agenda) => {
|
|
137
|
+
if (this.startedAgendas.has(agenda))
|
|
138
|
+
return;
|
|
139
|
+
await agenda.start();
|
|
140
|
+
if (this.stopping) {
|
|
141
|
+
await agenda.stop(false);
|
|
142
|
+
throw new Error('AgendaQueue:: Queue is shutting down.');
|
|
143
|
+
}
|
|
144
|
+
this.startedAgendas.add(agenda);
|
|
145
|
+
}));
|
|
146
|
+
const failed = results.find(result => result.status === 'rejected');
|
|
147
|
+
if (failed?.status === 'rejected')
|
|
148
|
+
throw failed.reason;
|
|
149
|
+
await this.runConfiguredStartupSchedules(this.normalizeJobDefinitions(sails.config.agendaQueue.jobs));
|
|
150
|
+
}
|
|
151
|
+
async initializeQueue() {
|
|
100
152
|
const queueConfig = sails.config.agendaQueue;
|
|
101
153
|
const queueOptions = queueConfig.options ?? {};
|
|
102
154
|
const jobs = this.normalizeJobDefinitions(queueConfig.jobs);
|
|
@@ -112,37 +164,40 @@ var Services;
|
|
|
112
164
|
if (requiredBackends.size === 0) {
|
|
113
165
|
requiredBackends.add(this.defaultBackend);
|
|
114
166
|
}
|
|
115
|
-
|
|
116
|
-
if (requiredBackends.has('mongodb')) {
|
|
167
|
+
// Keep successfully created backends if another backend or index setup fails.
|
|
168
|
+
if (requiredBackends.has('mongodb') && !this.agendas.mongodb) {
|
|
117
169
|
this.agendas.mongodb = await this.createAgendaForBackend('mongodb', queueOptions, dbManager);
|
|
170
|
+
this.registerAgendaEvents(this.agendas.mongodb, 'mongodb');
|
|
118
171
|
}
|
|
119
|
-
if (requiredBackends.has('sqs')) {
|
|
172
|
+
if (requiredBackends.has('sqs') && !this.agendas.sqs) {
|
|
120
173
|
this.agendas.sqs = await this.createAgendaForBackend('sqs', queueOptions, dbManager);
|
|
174
|
+
this.registerAgendaEvents(this.agendas.sqs, 'sqs');
|
|
121
175
|
}
|
|
122
176
|
this.agenda = this.agendas.mongodb ?? this.agendas[this.defaultBackend] ?? this.agendas.sqs;
|
|
123
|
-
this.queueInitialized = true;
|
|
124
177
|
this.defineJobs(jobs, this);
|
|
125
178
|
sails.log.verbose('AgendaQueue:: All jobs defined.');
|
|
126
|
-
const activeAgendas = Object.values(this.agendas).filter((agenda) => !_.isNil(agenda));
|
|
127
179
|
if (this.agendas.mongodb) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
await this.createMongoIndexes(dbManager, queueOptions);
|
|
180
|
+
try {
|
|
181
|
+
await this.createMongoIndexes(dbManager, queueOptions);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
// These auxiliary indexes improve performance; the backend's required index is separate.
|
|
185
|
+
sails.log.warn('AgendaQueue:: Auxiliary index setup failed; queue remains available:', error);
|
|
186
|
+
}
|
|
136
187
|
}
|
|
137
|
-
this.
|
|
138
|
-
}
|
|
139
|
-
hasQueueRuntimeState() {
|
|
140
|
-
return this.queueInitialized || this.jobBackendByName.size > 0 || Object.keys(this.agendas).length > 0;
|
|
188
|
+
this.queueInitialized = true;
|
|
141
189
|
}
|
|
142
190
|
async ensureQueueInitialized() {
|
|
143
|
-
if (
|
|
144
|
-
|
|
145
|
-
|
|
191
|
+
if (this.stopping)
|
|
192
|
+
throw new Error('AgendaQueue:: Queue is shutting down.');
|
|
193
|
+
if (this.queueInitialized)
|
|
194
|
+
return;
|
|
195
|
+
// Routes alone are not readiness: concurrent calls must await backend creation too.
|
|
196
|
+
this.queueInitPromise ??= this.initializeQueue().catch((error) => {
|
|
197
|
+
this.queueInitPromise = undefined;
|
|
198
|
+
throw error;
|
|
199
|
+
});
|
|
200
|
+
await this.queueInitPromise;
|
|
146
201
|
}
|
|
147
202
|
normalizeJobDefinitions(jobs) {
|
|
148
203
|
if (_.isNil(jobs)) {
|
|
@@ -298,7 +353,6 @@ var Services;
|
|
|
298
353
|
}
|
|
299
354
|
}
|
|
300
355
|
async createAgendaForBackend(backend, options, dbManager) {
|
|
301
|
-
const { Agenda: AgendaConstructor } = await import('agenda');
|
|
302
356
|
const agendaOptions = {
|
|
303
357
|
backend: undefined
|
|
304
358
|
};
|
|
@@ -312,9 +366,12 @@ var Services;
|
|
|
312
366
|
? datastoreUrl
|
|
313
367
|
: undefined;
|
|
314
368
|
agendaOptions.backend = !_.isNil(address)
|
|
315
|
-
? new MongoBackend({ address, collection: options.collection
|
|
369
|
+
? new MongoBackend({ address, collection: options.collection, options: {
|
|
370
|
+
serverSelectionTimeoutMS: this.getConnectionTimeoutMs(options),
|
|
371
|
+
connectTimeoutMS: this.getConnectionTimeoutMs(options)
|
|
372
|
+
} })
|
|
316
373
|
: new MongoBackend({ mongo: dbManager, collection: options.collection });
|
|
317
|
-
return
|
|
374
|
+
return this.createConnectedAgenda(agendaOptions.backend, agendaOptions, options);
|
|
318
375
|
}
|
|
319
376
|
const sqsOptions = options.sqs;
|
|
320
377
|
if (_.isNil(sqsOptions) || _.isEmpty(sqsOptions.queueUrl)) {
|
|
@@ -335,7 +392,56 @@ var Services;
|
|
|
335
392
|
}
|
|
336
393
|
: undefined
|
|
337
394
|
});
|
|
338
|
-
return
|
|
395
|
+
return this.createConnectedAgenda(agendaOptions.backend, agendaOptions, options);
|
|
396
|
+
}
|
|
397
|
+
getConnectionTimeoutMs(options) {
|
|
398
|
+
const configured = Number(options.connectionTimeoutMs);
|
|
399
|
+
return Number.isFinite(configured) && configured > 0 ? Math.ceil(configured) : 30000;
|
|
400
|
+
}
|
|
401
|
+
async createConnectedAgenda(backend, agendaOptions, options) {
|
|
402
|
+
const { Agenda: AgendaConstructor } = await import('agenda');
|
|
403
|
+
let discarded = false;
|
|
404
|
+
let deadline;
|
|
405
|
+
const connecting = Promise.resolve().then(async () => {
|
|
406
|
+
try {
|
|
407
|
+
await backend.connect();
|
|
408
|
+
}
|
|
409
|
+
finally {
|
|
410
|
+
// A timed-out connection may open resources before failing later.
|
|
411
|
+
// Clean up both outcomes once the discarded attempt settles.
|
|
412
|
+
if (discarded)
|
|
413
|
+
await backend.disconnect();
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
try {
|
|
417
|
+
await Promise.race([
|
|
418
|
+
connecting,
|
|
419
|
+
new Promise((_resolve, reject) => {
|
|
420
|
+
deadline = setTimeout(() => reject(new Error('AgendaQueue:: Backend connection timed out.')), this.getConnectionTimeoutMs(options));
|
|
421
|
+
})
|
|
422
|
+
]);
|
|
423
|
+
if (this.stopping)
|
|
424
|
+
throw new Error('AgendaQueue:: Queue is shutting down.');
|
|
425
|
+
// Agenda 6 starts connect() in its constructor without a rejection handler.
|
|
426
|
+
// Give it the already-successful connection, not another fallible attempt.
|
|
427
|
+
backend.connect = () => connecting;
|
|
428
|
+
const agenda = new AgendaConstructor({ ...agendaOptions, backend });
|
|
429
|
+
this.agendaBackends.set(agenda, backend);
|
|
430
|
+
await agenda.ready;
|
|
431
|
+
if (this.stopping)
|
|
432
|
+
throw new Error('AgendaQueue:: Queue is shutting down.');
|
|
433
|
+
return agenda;
|
|
434
|
+
}
|
|
435
|
+
catch (error) {
|
|
436
|
+
discarded = true;
|
|
437
|
+
void Promise.resolve().then(() => backend.disconnect()).catch(cleanupError => {
|
|
438
|
+
sails.log.error('AgendaQueue:: Failed to close discarded backend:', cleanupError);
|
|
439
|
+
});
|
|
440
|
+
throw error;
|
|
441
|
+
}
|
|
442
|
+
finally {
|
|
443
|
+
clearTimeout(deadline);
|
|
444
|
+
}
|
|
339
445
|
}
|
|
340
446
|
registerAgendaEvents(agenda, backend) {
|
|
341
447
|
agenda.on('ready', () => {
|
|
@@ -361,30 +467,31 @@ var Services;
|
|
|
361
467
|
await dbManager.collection(collectionName).createIndex({ name: 1, disabled: 1, lockedAt: 1, nextRunAt: 1 });
|
|
362
468
|
await dbManager.collection(collectionName).createIndex({ name: -1, disabled: -1, lockedAt: -1, nextRunAt: -1 });
|
|
363
469
|
}
|
|
364
|
-
runConfiguredStartupSchedules(jobs) {
|
|
365
|
-
|
|
366
|
-
if (_.isEmpty(job.schedule))
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
470
|
+
async runConfiguredStartupSchedules(jobs) {
|
|
471
|
+
for (const job of jobs) {
|
|
472
|
+
if (_.isEmpty(job.schedule) || this.completedStartupSchedules.has(job.name))
|
|
473
|
+
continue;
|
|
474
|
+
try {
|
|
475
|
+
const { method, intervalOrSchedule, data, opts } = job.schedule;
|
|
476
|
+
if (method === 'now') {
|
|
477
|
+
// Startup is already inside handleReady; avoid recursively waiting on it.
|
|
478
|
+
await this.submitNow(job.name, data);
|
|
479
|
+
}
|
|
480
|
+
else if (method === 'every' && intervalOrSchedule) {
|
|
481
|
+
await this.every(job.name, intervalOrSchedule, data, opts);
|
|
482
|
+
}
|
|
483
|
+
else if (method === 'schedule' && intervalOrSchedule) {
|
|
484
|
+
await this.schedule(job.name, intervalOrSchedule, data);
|
|
485
|
+
}
|
|
486
|
+
else {
|
|
487
|
+
throw new Error('Incorrect job schedule definition.');
|
|
488
|
+
}
|
|
489
|
+
this.completedStartupSchedules.add(job.name);
|
|
380
490
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
return;
|
|
491
|
+
catch (error) {
|
|
492
|
+
sails.log.error(`AgendaQueue:: Failed to configure startup schedule '${job.name}':`, error);
|
|
384
493
|
}
|
|
385
|
-
|
|
386
|
-
sails.log.error(JSON.stringify(job));
|
|
387
|
-
});
|
|
494
|
+
}
|
|
388
495
|
}
|
|
389
496
|
ensureScheduleSupported(jobName, schedule, data) {
|
|
390
497
|
if (this.getBackendForJobName(jobName) !== 'sqs') {
|
|
@@ -440,16 +547,21 @@ var Services;
|
|
|
440
547
|
}
|
|
441
548
|
every(jobName, interval, data = undefined, options = undefined) {
|
|
442
549
|
this.ensureRecurringScheduleSupported(jobName);
|
|
443
|
-
|
|
550
|
+
return this.getAgendaForJobName(jobName).every(interval, jobName, this.toSerializableJobData(data), options);
|
|
444
551
|
}
|
|
445
552
|
schedule(jobName, schedule, data = undefined) {
|
|
446
553
|
this.ensureScheduleSupported(jobName, schedule, data);
|
|
447
554
|
return this.getAgendaForJobName(jobName).schedule(schedule, jobName, this.toSerializableJobData(data));
|
|
448
555
|
}
|
|
449
556
|
async now(jobName, data = undefined) {
|
|
450
|
-
|
|
557
|
+
await this.ensureQueueInitialized();
|
|
558
|
+
if (this.readySeen && process.env.REDBOX_FIGSHARE_ADMIN !== 'true') {
|
|
559
|
+
// A failed ready event must not leave a producer silently accumulating unprocessed jobs.
|
|
451
560
|
await this.handleReady();
|
|
452
561
|
}
|
|
562
|
+
return this.submitNow(jobName, data);
|
|
563
|
+
}
|
|
564
|
+
async submitNow(jobName, data) {
|
|
453
565
|
sails.log.verbose(`AgendaQueue:: Starting job: '${jobName}' now!`);
|
|
454
566
|
const queuedJob = this.getAgendaForJobName(jobName).now(jobName, this.toSerializableJobData(data));
|
|
455
567
|
queuedJob.catch((e) => {
|
|
@@ -470,4 +582,4 @@ var Services;
|
|
|
470
582
|
}
|
|
471
583
|
Services.AgendaQueue = AgendaQueue;
|
|
472
584
|
})(Services || (exports.Services = Services = {}));
|
|
473
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbmRhUXVldWVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FnZW5kYVF1ZXVlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7OztBQUU5RCwwRkFBMEY7QUFDMUYsRUFBRTtBQUNGLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsRUFBRTtBQUNGLHVFQUF1RTtBQUN2RSx1RUFBdUU7QUFDdkUsb0VBQW9FO0FBQ3BFLHNDQUFzQztBQUN0QyxFQUFFO0FBQ0Ysa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLDhEQUE4RDtBQUc5RCxnREFBc0Q7QUFxQnRELE1BQWEsa0NBQW1DLFNBQVEsS0FBSztJQUMzRCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxvQ0FBb0MsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFMRCxnRkFLQztBQUdELElBQWlCLFFBQVEsQ0E4ZXhCO0FBOWVELFdBQWlCLFFBQVE7SUFDdkIsTUFBTSwyQkFBMkIsR0FBRywwREFBMEQsQ0FBQztJQUUvRjs7O09BR0c7SUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ2pDLGdCQUFnQixHQUFhO1lBQzlDLE9BQU87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
|
|
585
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbmRhUXVldWVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FnZW5kYVF1ZXVlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7OztBQUU5RCwwRkFBMEY7QUFDMUYsRUFBRTtBQUNGLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsRUFBRTtBQUNGLHVFQUF1RTtBQUN2RSx1RUFBdUU7QUFDdkUsb0VBQW9FO0FBQ3BFLHNDQUFzQztBQUN0QyxFQUFFO0FBQ0Ysa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLDhEQUE4RDtBQUc5RCxnREFBc0Q7QUFxQnRELE1BQWEsa0NBQW1DLFNBQVEsS0FBSztJQUMzRCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxvQ0FBb0MsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFMRCxnRkFLQztBQUdELElBQWlCLFFBQVEsQ0F3a0J4QjtBQXhrQkQsV0FBaUIsUUFBUTtJQUN2QixNQUFNLDJCQUEyQixHQUFHLDBEQUEwRCxDQUFDO0lBRS9GOzs7T0FHRztJQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFRLENBQUMsSUFBSSxDQUFDLE9BQU87UUFDakMsZ0JBQWdCLEdBQWE7WUFDOUMsT0FB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
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AppConfigSecretsConfig } from '../config/appConfigSecrets.config';
|
|
2
|
+
export interface AppConfigSecretReference {
|
|
3
|
+
$appConfigSecret: {
|
|
4
|
+
provider: 'aws-secrets-manager';
|
|
5
|
+
arn: string;
|
|
6
|
+
key?: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare function isAppConfigSecretReference(value: unknown): value is AppConfigSecretReference;
|
|
10
|
+
interface BundleLock {
|
|
11
|
+
owner?: string;
|
|
12
|
+
expiresAt: Date;
|
|
13
|
+
cacheToken?: string;
|
|
14
|
+
}
|
|
15
|
+
interface BundleLockCollection {
|
|
16
|
+
findOne(filter: object): Promise<BundleLock | null>;
|
|
17
|
+
updateOne(filter: object, update: object, options?: object): Promise<{
|
|
18
|
+
matchedCount: number;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
export interface AppConfigBundleLease {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly collection: BundleLockCollection;
|
|
24
|
+
readonly owner: string;
|
|
25
|
+
token: string;
|
|
26
|
+
expiresAt: number;
|
|
27
|
+
active: boolean;
|
|
28
|
+
aborted: boolean;
|
|
29
|
+
lost: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** Cached reads for both immutable field secrets and mutable brand bundles. */
|
|
32
|
+
export declare class AppConfigSecrets {
|
|
33
|
+
private config;
|
|
34
|
+
private client;
|
|
35
|
+
private values;
|
|
36
|
+
private bundleTokens;
|
|
37
|
+
constructor(config: AppConfigSecretsConfig);
|
|
38
|
+
store(brandId: string, configKey: string, field: string, value: string): Promise<AppConfigSecretReference>;
|
|
39
|
+
private getPrefix;
|
|
40
|
+
private remember;
|
|
41
|
+
/** Promise caching also coalesces concurrent reads. Rejected requests can be retried. */
|
|
42
|
+
private read;
|
|
43
|
+
/** Abort the complete SDK operation, including a response body stalled after headers. */
|
|
44
|
+
private withAwsDeadline;
|
|
45
|
+
private fetch;
|
|
46
|
+
private parseBundle;
|
|
47
|
+
private bundleName;
|
|
48
|
+
private lockCollection;
|
|
49
|
+
private synchronizeBundleCache;
|
|
50
|
+
/** Mongo-only freshness check before comparisons or hydration during saves/reloads. */
|
|
51
|
+
synchronizeBundle(brandId: string, purpose?: 'save' | 'load', lease?: AppConfigBundleLease): Promise<void>;
|
|
52
|
+
/** Keep the same cross-node lease from the authoritative row read through cache publication. */
|
|
53
|
+
withBundleSave<T>(brandId: string, save: (lease: AppConfigBundleLease) => Promise<T>): Promise<T>;
|
|
54
|
+
private assertBundleLease;
|
|
55
|
+
/** Renew immediately before persistence, and while an unabortable database write is pending. */
|
|
56
|
+
checkBundleSave(lease: AppConfigBundleLease): Promise<void>;
|
|
57
|
+
/** Merge only explicitly changed fields into the current brand JSON; never send cached snapshots. */
|
|
58
|
+
storeBundle(brandId: string, changes: ReadonlyMap<string, string | null>, lease?: AppConfigBundleLease): Promise<string | undefined>;
|
|
59
|
+
/** Explicit reloads refresh this ARN and its name alias without evicting other brands. */
|
|
60
|
+
invalidate(arn: string): void;
|
|
61
|
+
/** SDK messages can contain IAM/KMS resource details. Never log request inputs or raw errors. */
|
|
62
|
+
private safeAwsCall;
|
|
63
|
+
resolve(reference: AppConfigSecretReference): Promise<string>;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=AppConfigSecrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppConfigSecrets.d.ts","sourceRoot":"","sources":["../../src/services/AppConfigSecrets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE;QAAE,QAAQ,EAAE,qBAAqB,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,wBAAwB,CAa5F;AAMD,UAAU,UAAU;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7E,UAAU,oBAAoB;IAC5B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACpD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG;AACD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,+EAA+E;AAC/E,qBAAa,gBAAgB;IAKf,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,YAAY,CAA6B;gBAE7B,MAAM,EAAE,sBAAsB;IAS5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAkBhH,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,QAAQ;IAMhB,yFAAyF;YAC3E,IAAI;IAmBlB,yFAAyF;YAC3E,eAAe;YAOf,KAAK;IAOnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,sBAAsB;IAK9B,uFAAuF;IACjF,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,GAAG,MAAe,EAAE,KAAK,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxH,gGAAgG;IAC1F,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA0DvG,OAAO,CAAC,iBAAiB;IAKzB,gGAAgG;IAC1F,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjE,qGAAqG;IAC/F,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAyE1I,0FAA0F;IAC1F,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK7B,iGAAiG;YACnF,WAAW;IAanB,OAAO,CAAC,SAAS,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC;CAepE"}
|