@researchdatabox/redbox-core 0.0.0-bootstrap.0 → 0.0.1-beta.10173
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CoreController.d.ts +4 -0
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +68 -23
- package/dist/CoreService.d.ts +1 -1
- package/dist/CoreService.d.ts.map +1 -1
- package/dist/CoreService.js +1 -1
- package/dist/DatastreamService.d.ts +5 -2
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/HarvestRunService.d.ts +49 -0
- package/dist/HarvestRunService.d.ts.map +1 -0
- package/dist/HarvestRunService.js +13 -0
- package/dist/IntegrationAuditParams.d.ts +11 -0
- package/dist/IntegrationAuditParams.js +14 -0
- package/dist/QueueService.d.ts +1 -1
- package/dist/QueueService.d.ts.map +1 -1
- package/dist/RecordAuditParams.d.ts +2 -0
- package/dist/RecordAuditParams.d.ts.map +1 -1
- package/dist/RecordAuditParams.js +3 -1
- package/dist/RecordsService.d.ts +52 -2
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +5 -1
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/api-routes/apib.d.ts +7 -0
- package/dist/api-routes/apib.d.ts.map +1 -0
- package/dist/api-routes/apib.js +43 -0
- package/dist/api-routes/define.d.ts +4 -0
- package/dist/api-routes/define.d.ts.map +1 -0
- package/dist/api-routes/define.js +29 -0
- package/dist/api-routes/groups/admin.d.ts +6 -0
- package/dist/api-routes/groups/admin.d.ts.map +1 -0
- package/dist/api-routes/groups/admin.js +53 -0
- package/dist/api-routes/groups/appconfig.d.ts +4 -0
- package/dist/api-routes/groups/appconfig.d.ts.map +1 -0
- package/dist/api-routes/groups/appconfig.js +33 -0
- package/dist/api-routes/groups/branding.d.ts +8 -0
- package/dist/api-routes/groups/branding.d.ts.map +1 -0
- package/dist/api-routes/groups/branding.js +61 -0
- package/dist/api-routes/groups/dashboard-config.d.ts +11 -0
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -0
- package/dist/api-routes/groups/dashboard-config.js +90 -0
- package/dist/api-routes/groups/export.d.ts +3 -0
- package/dist/api-routes/groups/export.d.ts.map +1 -0
- package/dist/api-routes/groups/export.js +30 -0
- package/dist/api-routes/groups/forms.d.ts +4 -0
- package/dist/api-routes/groups/forms.d.ts.map +1 -0
- package/dist/api-routes/groups/forms.js +29 -0
- package/dist/api-routes/groups/harvest-runs.d.ts +5 -0
- package/dist/api-routes/groups/harvest-runs.d.ts.map +1 -0
- package/dist/api-routes/groups/harvest-runs.js +79 -0
- package/dist/api-routes/groups/integration-audit.d.ts +3 -0
- package/dist/api-routes/groups/integration-audit.d.ts.map +1 -0
- package/dist/api-routes/groups/integration-audit.js +35 -0
- package/dist/api-routes/groups/named-query.d.ts +8 -0
- package/dist/api-routes/groups/named-query.d.ts.map +1 -0
- package/dist/api-routes/groups/named-query.js +54 -0
- package/dist/api-routes/groups/notifications.d.ts +3 -0
- package/dist/api-routes/groups/notifications.d.ts.map +1 -0
- package/dist/api-routes/groups/notifications.js +20 -0
- package/dist/api-routes/groups/records.d.ts +28 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -0
- package/dist/api-routes/groups/records.js +353 -0
- package/dist/api-routes/groups/recordtypes.d.ts +4 -0
- package/dist/api-routes/groups/recordtypes.d.ts.map +1 -0
- package/dist/api-routes/groups/recordtypes.js +27 -0
- package/dist/api-routes/groups/reports.d.ts +9 -0
- package/dist/api-routes/groups/reports.d.ts.map +1 -0
- package/dist/api-routes/groups/reports.js +63 -0
- package/dist/api-routes/groups/search-query.d.ts +4 -0
- package/dist/api-routes/groups/search-query.d.ts.map +1 -0
- package/dist/api-routes/groups/search-query.js +51 -0
- package/dist/api-routes/groups/search.d.ts +6 -0
- package/dist/api-routes/groups/search.d.ts.map +1 -0
- package/dist/api-routes/groups/search.js +31 -0
- package/dist/api-routes/groups/translation.d.ts +8 -0
- package/dist/api-routes/groups/translation.d.ts.map +1 -0
- package/dist/api-routes/groups/translation.js +82 -0
- package/dist/api-routes/groups/users.d.ts +17 -0
- package/dist/api-routes/groups/users.d.ts.map +1 -0
- package/dist/api-routes/groups/users.js +149 -0
- package/dist/api-routes/groups/vocabulary.d.ts +10 -0
- package/dist/api-routes/groups/vocabulary.d.ts.map +1 -0
- package/dist/api-routes/groups/vocabulary.js +97 -0
- package/dist/api-routes/helpers.d.ts +29 -0
- package/dist/api-routes/helpers.d.ts.map +1 -0
- package/dist/api-routes/helpers.js +485 -0
- package/dist/api-routes/index.d.ts +27 -0
- package/dist/api-routes/index.d.ts.map +1 -0
- package/dist/api-routes/index.js +43 -0
- package/dist/api-routes/openapi.d.ts +26 -0
- package/dist/api-routes/openapi.d.ts.map +1 -0
- package/dist/api-routes/openapi.js +292 -0
- package/dist/api-routes/request-extraction.d.ts +14 -0
- package/dist/api-routes/request-extraction.d.ts.map +1 -0
- package/dist/api-routes/request-extraction.js +100 -0
- package/dist/api-routes/route-factory.d.ts +3 -0
- package/dist/api-routes/route-factory.d.ts.map +1 -0
- package/dist/api-routes/route-factory.js +30 -0
- package/dist/api-routes/route-registry.d.ts +24 -0
- package/dist/api-routes/route-registry.d.ts.map +1 -0
- package/dist/api-routes/route-registry.js +117 -0
- package/dist/api-routes/route-resolution.d.ts +4 -0
- package/dist/api-routes/route-resolution.d.ts.map +1 -0
- package/dist/api-routes/route-resolution.js +71 -0
- package/dist/api-routes/schemas/common.d.ts +35 -0
- package/dist/api-routes/schemas/common.d.ts.map +1 -0
- package/dist/api-routes/schemas/common.js +146 -0
- package/dist/api-routes/schemas/responses.d.ts +972 -0
- package/dist/api-routes/schemas/responses.d.ts.map +1 -0
- package/dist/api-routes/schemas/responses.js +512 -0
- package/dist/api-routes/types.d.ts +70 -0
- package/dist/api-routes/types.d.ts.map +1 -0
- package/dist/api-routes/types.js +3 -0
- package/dist/api-routes/validation.d.ts +32 -0
- package/dist/api-routes/validation.d.ts.map +1 -0
- package/dist/api-routes/validation.js +142 -0
- package/dist/api-routes/zod-openapi.d.ts +3 -0
- package/dist/api-routes/zod-openapi.d.ts.map +1 -0
- package/dist/api-routes/zod-openapi.js +8 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +12 -12
- package/dist/config/agendaQueue.config.d.ts +33 -6
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +40 -18
- package/dist/config/auth.config.d.ts.map +1 -1
- package/dist/config/auth.config.js +29 -2
- package/dist/config/branding.config.d.ts +2 -1
- package/dist/config/branding.config.d.ts.map +1 -1
- package/dist/config/branding.config.js +5 -95
- package/dist/config/brandingConfigurationDefaults.config.d.ts +3 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +158 -5
- package/dist/config/custom.config.d.ts +6 -0
- package/dist/config/custom.config.d.ts.map +1 -1
- package/dist/config/custom.config.js +10 -1
- package/dist/config/dashboardtype.config.d.ts +5 -0
- package/dist/config/dashboardtype.config.d.ts.map +1 -1
- package/dist/config/dashboardtype.config.js +1 -1
- package/dist/config/dashboardview.config.d.ts +24 -0
- package/dist/config/dashboardview.config.d.ts.map +1 -0
- package/dist/config/dashboardview.config.js +137 -0
- package/dist/config/dompurify.config.d.ts +1 -0
- package/dist/config/dompurify.config.d.ts.map +1 -1
- package/dist/config/dompurify.config.js +5 -4
- package/dist/config/emailnotification.config.d.ts.map +1 -1
- package/dist/config/emailnotification.config.js +2 -1
- package/dist/config/figshareDev.config.d.ts +12 -0
- package/dist/config/figshareDev.config.js +9 -0
- package/dist/config/form.config.d.ts +4 -0
- package/dist/config/form.config.d.ts.map +1 -1
- package/dist/config/form.config.js +1 -1
- package/dist/config/harvestRuns.config.d.ts +9 -0
- package/dist/config/harvestRuns.config.d.ts.map +1 -0
- package/dist/config/harvestRuns.config.js +11 -0
- package/dist/config/http.config.d.ts +13 -1
- package/dist/config/http.config.d.ts.map +1 -1
- package/dist/config/http.config.js +201 -38
- package/dist/config/index.d.ts +14 -19
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +10 -15
- package/dist/config/namedQuery.config.d.ts +26 -4
- package/dist/config/namedQuery.config.d.ts.map +1 -1
- package/dist/config/namedQuery.config.js +7 -350
- package/dist/config/policies.config.d.ts +3 -0
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +35 -1
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +2 -1
- package/dist/config/recordtype.config.d.ts +28 -0
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +105 -13
- package/dist/config/redboxSession.config.d.ts +3 -0
- package/dist/config/redboxSession.config.d.ts.map +1 -1
- package/dist/config/redboxSession.config.js +1 -1
- package/dist/config/report.config.d.ts +2 -11
- package/dist/config/report.config.d.ts.map +1 -1
- package/dist/config/report.config.js +3 -49
- package/dist/config/reusableContributorFormDefinitions.config.d.ts +1 -1
- package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -1
- package/dist/config/reusableContributorFormDefinitions.config.js +371 -206
- package/dist/config/reusableViewFormDefinitions.config.js +3 -3
- package/dist/config/routes.config.d.ts +5 -2
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +55 -117
- package/dist/config/storage.config.d.ts +20 -2
- package/dist/config/storage.config.d.ts.map +1 -1
- package/dist/config/storage.config.js +2 -1
- package/dist/config/validators.config.d.ts +6 -4
- package/dist/config/validators.config.d.ts.map +1 -1
- package/dist/config/validators.config.js +5 -3
- package/dist/config/vocab.config.d.ts +30 -0
- package/dist/config/vocab.config.d.ts.map +1 -1
- package/dist/config/vocab.config.js +21 -1
- package/dist/config/webpack.config.d.ts.map +1 -1
- package/dist/config/webpack.config.js +18 -12
- package/dist/config/workflow.config.d.ts +0 -1
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -137
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +4 -3
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts +48 -0
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -1
- package/dist/configmodels/AuthorizedDomainsEmails.js +50 -2
- package/dist/configmodels/ConfigModels.d.ts +7 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +41 -1
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts +1011 -0
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts.map +1 -0
- package/dist/configmodels/DashboardTableOverrideConfig.js +138 -0
- package/dist/configmodels/DoiPublishing.d.ts +4711 -0
- package/dist/configmodels/DoiPublishing.js +639 -0
- package/dist/configmodels/FigsharePublishing.d.ts +1376 -0
- package/dist/configmodels/FigsharePublishing.js +630 -0
- package/dist/configmodels/IntegrationNotificationConfig.d.ts +133 -0
- package/dist/configmodels/IntegrationNotificationConfig.d.ts.map +1 -0
- package/dist/configmodels/IntegrationNotificationConfig.js +64 -0
- package/dist/configmodels/SystemMessage.d.ts +32 -0
- package/dist/configmodels/SystemMessage.d.ts.map +1 -1
- package/dist/configmodels/SystemMessage.js +34 -2
- package/dist/controllers/AdminController.d.ts +1 -1
- package/dist/controllers/AdminController.d.ts.map +1 -1
- package/dist/controllers/AdminController.js +6 -32
- package/dist/controllers/AppConfigController.js +3 -3
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +11 -10
- package/dist/controllers/BrandingController.d.ts +11 -5
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +116 -48
- package/dist/controllers/DashboardConfigController.d.ts +8 -0
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/DashboardConfigController.js +17 -0
- package/dist/controllers/DynamicAssetController.d.ts +1 -21
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +19 -41
- package/dist/controllers/EmailController.d.ts.map +1 -1
- package/dist/controllers/EmailController.js +16 -12
- package/dist/controllers/FormVocabularyController.d.ts +3 -0
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
- package/dist/controllers/FormVocabularyController.js +154 -4
- package/dist/controllers/NamedQueryController.d.ts +8 -0
- package/dist/controllers/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/NamedQueryController.js +17 -0
- package/dist/controllers/RecordAuditController.d.ts +31 -14
- package/dist/controllers/RecordAuditController.d.ts.map +1 -1
- package/dist/controllers/RecordAuditController.js +509 -57
- package/dist/controllers/RecordController.d.ts +18 -16
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +314 -167
- package/dist/controllers/RenderViewController.d.ts.map +1 -1
- package/dist/controllers/RenderViewController.js +4 -2
- package/dist/controllers/ReportController.d.ts +7 -0
- package/dist/controllers/ReportController.d.ts.map +1 -1
- package/dist/controllers/ReportController.js +75 -2
- package/dist/controllers/ReportsController.d.ts +1 -0
- package/dist/controllers/ReportsController.d.ts.map +1 -1
- package/dist/controllers/ReportsController.js +12 -2
- package/dist/controllers/TranslationController.d.ts.map +1 -1
- package/dist/controllers/TranslationController.js +14 -12
- package/dist/controllers/WorkspaceTypesController.d.ts +3 -2
- package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -1
- package/dist/controllers/WorkspaceTypesController.js +120 -31
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +19 -4
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +16 -17
- package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/AppConfigController.js +17 -18
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +102 -48
- package/dist/controllers/webservice/DashboardConfigController.d.ts +26 -0
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/webservice/DashboardConfigController.js +241 -0
- package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ExportController.js +11 -11
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +11 -13
- package/dist/controllers/webservice/HarvestRunController.d.ts +13 -0
- package/dist/controllers/webservice/HarvestRunController.d.ts.map +1 -0
- package/dist/controllers/webservice/HarvestRunController.js +148 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts +10 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -1
- package/dist/controllers/webservice/IntegrationAuditController.js +98 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts +17 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/webservice/NamedQueryController.js +127 -0
- package/dist/controllers/webservice/RecordController.d.ts +4 -0
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +441 -314
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +9 -10
- package/dist/controllers/webservice/ReportController.d.ts +7 -0
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ReportController.js +125 -19
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +28 -35
- package/dist/controllers/webservice/TranslationController.d.ts.map +1 -1
- package/dist/controllers/webservice/TranslationController.js +65 -43
- package/dist/controllers/webservice/UserManagementController.d.ts +1 -1
- package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/UserManagementController.js +114 -101
- package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
- package/dist/controllers/webservice/VocabularyController.js +76 -28
- package/dist/form-config/dataRecord-1.0-draft.js +3 -3
- package/dist/form-config/default-1.0-draft.d.ts.map +1 -1
- package/dist/form-config/default-1.0-draft.js +27 -3
- package/dist/form-config/index.d.ts.map +1 -1
- package/dist/form-config/index.js +1 -1
- package/dist/hooks/defineRedboxHook.d.ts +3 -0
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
- package/dist/hooks/defineRedboxHook.js +4 -1
- package/dist/hooks/webpack.d.ts.map +1 -1
- package/dist/hooks/webpack.js +17 -7
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/loader/MigrationRunner.d.ts +19 -0
- package/dist/loader/MigrationRunner.d.ts.map +1 -0
- package/dist/loader/MigrationRunner.js +108 -0
- package/dist/loader/bootstrapShimRuntime.d.ts +2 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +7 -2
- package/dist/loader/index.d.ts +17 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +216 -13
- package/dist/middleware/redboxSession.d.ts +5 -0
- package/dist/middleware/redboxSession.d.ts.map +1 -1
- package/dist/middleware/redboxSession.js +19 -6
- package/dist/model/BuildResponse.d.ts +4 -0
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.d.ts +13 -1
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +12 -4
- package/dist/model/DashboardViewResponseModel.d.ts +20 -0
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -0
- package/dist/model/DashboardViewResponseModel.js +38 -0
- package/dist/model/RecordTypeResponseModel.d.ts +3 -1
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +4 -2
- package/dist/model/RequestDetails.d.ts +1 -1
- package/dist/model/RequestDetails.d.ts.map +1 -1
- package/dist/model/RequestDetails.js +1 -1
- package/dist/model/config/ReportConfig.d.ts +1 -1
- package/dist/model/config/ReportConfig.d.ts.map +1 -1
- package/dist/model/config/ReportConfig.js +2 -2
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +5 -2
- package/dist/model/storage/BrandingModel.d.ts +0 -16
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +2 -51
- package/dist/model/storage/DashboardTypeModel.d.ts +4 -0
- package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -1
- package/dist/model/storage/HarvestRunModel.d.ts +140 -0
- package/dist/model/storage/HarvestRunModel.d.ts.map +1 -0
- package/dist/model/storage/HarvestRunModel.js +110 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts +49 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
- package/dist/model/storage/IntegrationAuditModel.js +106 -0
- package/dist/model/storage/RecordTypeModel.d.ts +16 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +9 -1
- package/dist/model/storage/ReportModel.d.ts +1 -0
- package/dist/model/storage/ReportModel.d.ts.map +1 -1
- package/dist/model/storage/index.d.ts +2 -0
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +15 -2
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +23 -2
- package/dist/policies/i18nLanguages.d.ts.map +1 -1
- package/dist/policies/i18nLanguages.js +1 -1
- package/dist/policies/index.d.ts +3 -0
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +6 -2
- package/dist/policies/menuResolver.d.ts.map +1 -1
- package/dist/policies/menuResolver.js +1 -1
- package/dist/policies/setLang.d.ts.map +1 -1
- package/dist/policies/setLang.js +1 -1
- package/dist/policies/validateApiContractRequest.d.ts +3 -0
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -0
- package/dist/policies/validateApiContractRequest.js +74 -0
- package/dist/responses/badRequest.d.ts.map +1 -1
- package/dist/responses/badRequest.js +5 -3
- package/dist/responses/created.d.ts.map +1 -1
- package/dist/responses/created.js +5 -3
- package/dist/responses/forbidden.d.ts.map +1 -1
- package/dist/responses/forbidden.js +5 -3
- package/dist/responses/ok.d.ts.map +1 -1
- package/dist/responses/ok.js +5 -3
- package/dist/responses/serverError.d.ts.map +1 -1
- package/dist/responses/serverError.js +5 -3
- package/dist/responses/siteTitle.d.ts +6 -0
- package/dist/responses/siteTitle.d.ts.map +1 -0
- package/dist/responses/siteTitle.js +28 -0
- package/dist/sails.d.ts +9 -0
- package/dist/sails.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.d.ts +39 -17
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +328 -87
- package/dist/services/AppConfigService.d.ts +20 -2
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +129 -15
- package/dist/services/AttachmentMetadataService.d.ts +34 -0
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -0
- package/dist/services/AttachmentMetadataService.js +133 -0
- package/dist/services/BrandingLogoService.d.ts +11 -8
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +71 -72
- package/dist/services/BrandingService.d.ts.map +1 -1
- package/dist/services/BrandingService.js +4 -32
- package/dist/services/BrandingThemeCssService.d.ts +21 -0
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -0
- package/dist/services/BrandingThemeCssService.js +113 -0
- package/dist/services/BrandingThemeTokens.d.ts +16 -0
- package/dist/services/BrandingThemeTokens.d.ts.map +1 -0
- package/dist/services/BrandingThemeTokens.js +82 -0
- package/dist/services/CacheService.d.ts.map +1 -1
- package/dist/services/CacheService.js +37 -29
- package/dist/services/DashboardConfigService.d.ts +71 -0
- package/dist/services/DashboardConfigService.d.ts.map +1 -0
- package/dist/services/DashboardConfigService.js +315 -0
- package/dist/services/DashboardTypesService.d.ts +61 -63
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +361 -198
- package/dist/services/DoiService.d.ts +30 -25
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +448 -393
- package/dist/services/EmailService.d.ts +17 -3
- package/dist/services/EmailService.d.ts.map +1 -1
- package/dist/services/EmailService.js +44 -17
- package/dist/services/FigshareService.d.ts +40 -65
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +616 -2038
- package/dist/services/FormPayloadPrehydrateService.d.ts +35 -0
- package/dist/services/FormPayloadPrehydrateService.d.ts.map +1 -0
- package/dist/services/FormPayloadPrehydrateService.js +200 -0
- package/dist/services/FormRecordConsistencyService.d.ts +3 -3
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +21 -19
- package/dist/services/FormVocabularyService.d.ts +45 -0
- package/dist/services/FormVocabularyService.d.ts.map +1 -0
- package/dist/services/FormVocabularyService.js +326 -0
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +8 -6
- package/dist/services/HarvestRunService.d.ts +73 -0
- package/dist/services/HarvestRunService.d.ts.map +1 -0
- package/dist/services/HarvestRunService.js +1317 -0
- package/dist/services/I18nEntriesService.d.ts +9 -4
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +96 -18
- package/dist/services/IntegrationAuditService.d.ts +158 -0
- package/dist/services/IntegrationAuditService.d.ts.map +1 -1
- package/dist/services/IntegrationAuditService.js +838 -0
- package/dist/services/IntegrationNotificationService.d.ts +55 -0
- package/dist/services/IntegrationNotificationService.d.ts.map +1 -0
- package/dist/services/IntegrationNotificationService.js +271 -0
- package/dist/services/NamedQueryService.d.ts +51 -12
- package/dist/services/NamedQueryService.d.ts.map +1 -1
- package/dist/services/NamedQueryService.js +622 -125
- package/dist/services/OniService.js +2 -2
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +3 -2
- package/dist/services/RecordsService.d.ts +24 -2
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +119 -19
- package/dist/services/ReportsService.d.ts +57 -1
- package/dist/services/ReportsService.d.ts.map +1 -1
- package/dist/services/ReportsService.js +258 -34
- package/dist/services/SassCompilerService.d.ts +4 -10
- package/dist/services/SassCompilerService.d.ts.map +1 -1
- package/dist/services/SassCompilerService.js +9 -173
- package/dist/services/SolrSearchService.d.ts +1 -0
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +14 -3
- package/dist/services/StandardDatastreamService.d.ts +37 -5
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +535 -38
- package/dist/services/StorageManagerService.d.ts +13 -1
- package/dist/services/StorageManagerService.d.ts.map +1 -1
- package/dist/services/StorageManagerService.js +94 -11
- package/dist/services/TemplateService.d.ts +2 -18
- package/dist/services/TemplateService.d.ts.map +1 -1
- package/dist/services/TemplateService.js +9 -53
- package/dist/services/VocabularyService.d.ts +13 -0
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +204 -14
- package/dist/services/doi-v2/audit.d.ts +7 -0
- package/dist/services/doi-v2/audit.d.ts.map +1 -1
- package/dist/services/doi-v2/audit.js +30 -0
- package/dist/services/doi-v2/bindings.d.ts +8 -0
- package/dist/services/doi-v2/bindings.d.ts.map +1 -1
- package/dist/services/doi-v2/bindings.js +79 -0
- package/dist/services/doi-v2/config.d.ts +7 -0
- package/dist/services/doi-v2/config.js +51 -0
- package/dist/services/doi-v2/context.d.ts +18 -0
- package/dist/services/doi-v2/context.js +41 -0
- package/dist/services/doi-v2/http.d.ts +21 -0
- package/dist/services/doi-v2/http.js +88 -0
- package/dist/services/doi-v2/payload.d.ts +4 -0
- package/dist/services/doi-v2/payload.js +291 -0
- package/dist/services/doi-v2/profiles.d.ts +5 -0
- package/dist/services/doi-v2/profiles.js +31 -0
- package/dist/services/doi-v2/runtime.d.ts +16 -0
- package/dist/services/doi-v2/runtime.js +173 -0
- package/dist/services/doi-v2/types.d.ts +49 -0
- package/dist/services/doi-v2/types.js +3 -0
- package/dist/services/figshare-v2/assets.d.ts +5 -0
- package/dist/services/figshare-v2/assets.js +297 -0
- package/dist/services/figshare-v2/audit.d.ts +7 -0
- package/dist/services/figshare-v2/audit.d.ts.map +1 -0
- package/dist/services/figshare-v2/audit.js +30 -0
- package/dist/services/figshare-v2/bindings.d.ts +6 -0
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
- package/dist/services/figshare-v2/bindings.js +58 -0
- package/dist/services/figshare-v2/config.d.ts +13 -0
- package/dist/services/figshare-v2/config.d.ts.map +1 -1
- package/dist/services/figshare-v2/config.js +105 -0
- package/dist/services/figshare-v2/context.d.ts +4 -0
- package/dist/services/figshare-v2/context.d.ts.map +1 -1
- package/dist/services/figshare-v2/context.js +21 -0
- package/dist/services/figshare-v2/embargo.d.ts +5 -0
- package/dist/services/figshare-v2/embargo.js +36 -0
- package/dist/services/figshare-v2/http.d.ts +42 -0
- package/dist/services/figshare-v2/http.d.ts.map +1 -1
- package/dist/services/figshare-v2/http.js +324 -0
- package/dist/services/figshare-v2/metadata.d.ts +6 -0
- package/dist/services/figshare-v2/metadata.d.ts.map +1 -1
- package/dist/services/figshare-v2/metadata.js +280 -0
- package/dist/services/figshare-v2/observability.d.ts +7 -0
- package/dist/services/figshare-v2/observability.d.ts.map +1 -1
- package/dist/services/figshare-v2/observability.js +87 -0
- package/dist/services/figshare-v2/plan.d.ts +5 -0
- package/dist/services/figshare-v2/plan.js +51 -0
- package/dist/services/figshare-v2/publish.d.ts +5 -0
- package/dist/services/figshare-v2/publish.js +20 -0
- package/dist/services/figshare-v2/queue.d.ts +4 -0
- package/dist/services/figshare-v2/queue.js +11 -0
- package/dist/services/figshare-v2/runtime.d.ts +14 -0
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +88 -0
- package/dist/services/figshare-v2/types.d.ts +198 -0
- package/dist/services/figshare-v2/types.d.ts.map +1 -1
- package/dist/services/figshare-v2/types.js +59 -0
- package/dist/services/figshare-v2/workflow.d.ts +3 -0
- package/dist/services/figshare-v2/workflow.js +7 -0
- package/dist/services/figshare-v2/writeback.d.ts +5 -0
- package/dist/services/figshare-v2/writeback.js +45 -0
- package/dist/services/index.d.ts +24 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +43 -7
- package/dist/shims/momentShim.d.ts.map +1 -1
- package/dist/shims/momentShim.js +1 -6
- package/dist/storage/GridFSDriver.d.ts +101 -0
- package/dist/storage/GridFSDriver.d.ts.map +1 -0
- package/dist/storage/GridFSDriver.js +291 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts +49 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -0
- package/dist/storage/TusStorageManagerDataStore.js +300 -0
- package/dist/utilities/RequestParamUtils.d.ts +3 -0
- package/dist/utilities/RequestParamUtils.d.ts.map +1 -0
- package/dist/utilities/RequestParamUtils.js +13 -0
- package/dist/visitor/attachment-fields.visitor.d.ts +17 -17
- package/dist/visitor/attachment-fields.visitor.d.ts.map +1 -1
- package/dist/visitor/attachment-fields.visitor.js +44 -34
- package/dist/visitor/client.visitor.d.ts +145 -97
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +366 -273
- package/dist/visitor/construct.visitor.d.ts +99 -93
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +302 -227
- package/dist/visitor/context-variables.visitor.d.ts +35 -35
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +85 -75
- package/dist/visitor/data-value.visitor.d.ts +99 -93
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +157 -148
- package/dist/visitor/json-type-def.visitor.d.ts +96 -90
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +158 -149
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +101 -94
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +356 -295
- package/dist/visitor/template.visitor.d.ts +100 -92
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +245 -156
- package/dist/visitor/validator.visitor.d.ts +95 -91
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +184 -152
- package/dist/visitor/visitor-helpers.js +9 -9
- package/dist/visitor/vocab-inline.visitor.d.ts +34 -19
- package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
- package/dist/visitor/vocab-inline.visitor.js +157 -48
- package/dist/waterline-models/AttachmentAccessAudit.d.ts +26 -0
- package/dist/waterline-models/AttachmentAccessAudit.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentAccessAudit.js +63 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts +40 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentMetadata.js +147 -0
- package/dist/waterline-models/BrandingConfig.d.ts +0 -2
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +5 -9
- package/dist/waterline-models/DashboardType.d.ts +7 -0
- package/dist/waterline-models/DashboardType.d.ts.map +1 -1
- package/dist/waterline-models/DashboardType.js +16 -1
- package/dist/waterline-models/HarvestRecordEvent.d.ts +43 -0
- package/dist/waterline-models/HarvestRecordEvent.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRecordEvent.js +107 -0
- package/dist/waterline-models/HarvestRun.d.ts +51 -0
- package/dist/waterline-models/HarvestRun.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRun.js +125 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts +57 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRunChunk.js +140 -0
- package/dist/waterline-models/I18nTranslation.d.ts +2 -0
- package/dist/waterline-models/I18nTranslation.d.ts.map +1 -1
- package/dist/waterline-models/I18nTranslation.js +6 -1
- package/dist/waterline-models/Migration.d.ts +24 -0
- package/dist/waterline-models/Migration.d.ts.map +1 -0
- package/dist/waterline-models/Migration.js +52 -0
- package/dist/waterline-models/NamedQuery.d.ts +6 -0
- package/dist/waterline-models/NamedQuery.d.ts.map +1 -1
- package/dist/waterline-models/NamedQuery.js +16 -1
- package/dist/waterline-models/index.d.ts +12 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +19 -1
- package/package.json +77 -51
- package/redbox-loader-templates/bootstrap-shim.js.hbs +14 -1
- package/dist/config/datacite.config.d.ts +0 -51
- package/dist/config/datacite.config.d.ts.map +0 -1
- package/dist/config/datacite.config.js +0 -44
- package/dist/config/figshareAPI.config.d.ts +0 -116
- package/dist/config/figshareAPI.config.d.ts.map +0 -1
- package/dist/config/figshareAPI.config.js +0 -857
- package/dist/config/figshareAPIEnv.config.d.ts +0 -11
- package/dist/config/figshareAPIEnv.config.d.ts.map +0 -1
- package/dist/config/figshareAPIEnv.config.js +0 -13
- package/dist/config/figshareRedboxFORMapping.config.d.ts +0 -15
- package/dist/config/figshareRedboxFORMapping.config.d.ts.map +0 -1
- package/dist/config/figshareRedboxFORMapping.config.js +0 -7458
- package/dist/config/relatedObjectsFormDefinition.config.d.ts.map +0 -1
- package/dist/controllers/VocabController.d.ts +0 -43
- package/dist/controllers/VocabController.d.ts.map +0 -1
- package/dist/controllers/VocabController.js +0 -190
- package/dist/form-config/dataPublication-1.0-draft.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-embargoed.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-published.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-queued.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-retired.d.ts.map +0 -1
- package/dist/services/VocabService.d.ts +0 -81
- package/dist/services/VocabService.d.ts.map +0 -1
- package/dist/services/VocabService.js +0 -424
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
// with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
19
|
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.Services = void 0;
|
|
21
|
+
exports.Services = exports.AgendaQueueUnsupportedFeatureError = void 0;
|
|
22
22
|
// Copyright (c) 2020 Queensland Cyber Infrastructure Foundation (http://www.qcif.edu.au/)
|
|
23
23
|
//
|
|
24
24
|
// GNU GENERAL PUBLIC LICENSE
|
|
@@ -38,9 +38,16 @@ exports.Services = void 0;
|
|
|
38
38
|
// with this program; if not, write to the Free Software Foundation, Inc.,
|
|
39
39
|
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
40
40
|
const CoreService_1 = require("../CoreService");
|
|
41
|
-
|
|
41
|
+
class AgendaQueueUnsupportedFeatureError extends Error {
|
|
42
|
+
constructor(message) {
|
|
43
|
+
super(message);
|
|
44
|
+
this.name = 'AgendaQueueUnsupportedFeatureError';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.AgendaQueueUnsupportedFeatureError = AgendaQueueUnsupportedFeatureError;
|
|
42
48
|
var Services;
|
|
43
49
|
(function (Services) {
|
|
50
|
+
const EXTERNAL_SCHEDULER_GUIDANCE = 'Use an external scheduler for SQS-backed recurring jobs.';
|
|
44
51
|
/**
|
|
45
52
|
* Service class for queuing using Agenda: https://github.com/agenda/agenda
|
|
46
53
|
*
|
|
@@ -57,6 +64,11 @@ var Services;
|
|
|
57
64
|
'init'
|
|
58
65
|
];
|
|
59
66
|
agenda;
|
|
67
|
+
agendas = {};
|
|
68
|
+
defaultBackend = 'mongodb';
|
|
69
|
+
jobBackendByName = new Map();
|
|
70
|
+
readyInitPromise;
|
|
71
|
+
queueInitialized = false;
|
|
60
72
|
constructor() {
|
|
61
73
|
super();
|
|
62
74
|
}
|
|
@@ -69,69 +81,83 @@ var Services;
|
|
|
69
81
|
async init() {
|
|
70
82
|
const that = this;
|
|
71
83
|
this.registerSailsHook('on', 'ready', async function () {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
that.agenda = new agenda_1.Agenda(agendaOpts);
|
|
82
|
-
that.defineJobs(sails.config.agendaQueue.jobs, that);
|
|
83
|
-
sails.log.verbose(`AgendaQueue:: All jobs defined.`);
|
|
84
|
-
that.agenda.on('ready', () => {
|
|
85
|
-
sails.log.verbose(`AgendaQueue:: Started!`);
|
|
86
|
-
});
|
|
87
|
-
that.agenda.on('error', (err) => {
|
|
88
|
-
sails.log.error(`AgendaQueue:: Error:`);
|
|
89
|
-
sails.log.error(JSON.stringify(err));
|
|
90
|
-
});
|
|
91
|
-
that.agenda.on('start', (job) => {
|
|
92
|
-
sails.log.verbose(`AgendaQueue:: Job ${job.attrs.name} starting`);
|
|
93
|
-
});
|
|
94
|
-
that.agenda.on('complete', (job) => {
|
|
95
|
-
sails.log.verbose(`AgendaQueue:: Job ${job.attrs.name} finished`);
|
|
96
|
-
});
|
|
97
|
-
that.agenda.on('fail', (err, job) => {
|
|
98
|
-
sails.log.error(`AgendaQueue:: Job ${job.attrs.name} failed`);
|
|
99
|
-
sails.log.error(err);
|
|
100
|
-
});
|
|
101
|
-
await that.agenda.start();
|
|
102
|
-
//Create indexes after agenda start
|
|
103
|
-
const collectionName = String(_.get(agendaOpts, 'collection', 'agendaJobs'));
|
|
104
|
-
await dbManager.collection(collectionName).createIndex({ name: 1, disabled: 1, lockedAt: 1, nextRunAt: 1 });
|
|
105
|
-
await dbManager.collection(collectionName).createIndex({ name: -1, disabled: -1, lockedAt: -1, nextRunAt: -1 });
|
|
106
|
-
// check for in-line job schedule
|
|
107
|
-
_.each(sails.config.agendaQueue.jobs, (job) => {
|
|
108
|
-
if (!_.isEmpty(job.schedule)) {
|
|
109
|
-
const method = job.schedule.method;
|
|
110
|
-
const intervalOrSchedule = job.schedule.intervalOrSchedule;
|
|
111
|
-
const data = job.schedule.data;
|
|
112
|
-
const opts = job.schedule.opts;
|
|
113
|
-
if (method == 'now') {
|
|
114
|
-
that.now(job.name, data);
|
|
115
|
-
}
|
|
116
|
-
else if (method == 'every' && intervalOrSchedule) {
|
|
117
|
-
that.every(job.name, intervalOrSchedule, data, opts);
|
|
118
|
-
}
|
|
119
|
-
else if (method == 'schedule' && intervalOrSchedule) {
|
|
120
|
-
that.schedule(job.name, intervalOrSchedule, data);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
sails.log.error(`AgendaQueue:: incorrect job schedule definition, method not found:`);
|
|
124
|
-
sails.log.error(JSON.stringify(job));
|
|
125
|
-
}
|
|
126
|
-
}
|
|
84
|
+
await that.handleReady();
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async handleReady() {
|
|
88
|
+
if (_.isNil(this.readyInitPromise)) {
|
|
89
|
+
this.readyInitPromise = this.handleReadyInternal().catch((err) => {
|
|
90
|
+
this.readyInitPromise = undefined;
|
|
91
|
+
throw err;
|
|
127
92
|
});
|
|
93
|
+
}
|
|
94
|
+
await this.readyInitPromise;
|
|
95
|
+
}
|
|
96
|
+
async handleReadyInternal() {
|
|
97
|
+
this.queueInitialized = false;
|
|
98
|
+
const queueConfig = sails.config.agendaQueue;
|
|
99
|
+
const queueOptions = queueConfig.options ?? {};
|
|
100
|
+
const jobs = this.normalizeJobDefinitions(queueConfig.jobs);
|
|
101
|
+
const dbManager = User.getDatastore().manager;
|
|
102
|
+
this.defaultBackend = this.getDefaultBackend(queueOptions);
|
|
103
|
+
const requiredBackends = new Set();
|
|
104
|
+
this.jobBackendByName = new Map();
|
|
105
|
+
_.each(jobs, (job) => {
|
|
106
|
+
const backend = this.getBackendForJob(job);
|
|
107
|
+
this.jobBackendByName.set(job.name, backend);
|
|
108
|
+
requiredBackends.add(backend);
|
|
128
109
|
});
|
|
110
|
+
if (requiredBackends.size === 0) {
|
|
111
|
+
requiredBackends.add(this.defaultBackend);
|
|
112
|
+
}
|
|
113
|
+
this.agendas = {};
|
|
114
|
+
if (requiredBackends.has('mongodb')) {
|
|
115
|
+
this.agendas.mongodb = await this.createAgendaForBackend('mongodb', queueOptions, dbManager);
|
|
116
|
+
}
|
|
117
|
+
if (requiredBackends.has('sqs')) {
|
|
118
|
+
this.agendas.sqs = await this.createAgendaForBackend('sqs', queueOptions, dbManager);
|
|
119
|
+
}
|
|
120
|
+
this.agenda = this.agendas.mongodb ?? this.agendas[this.defaultBackend] ?? this.agendas.sqs;
|
|
121
|
+
this.queueInitialized = true;
|
|
122
|
+
this.defineJobs(jobs, this);
|
|
123
|
+
sails.log.verbose('AgendaQueue:: All jobs defined.');
|
|
124
|
+
const activeAgendas = Object.values(this.agendas).filter((agenda) => !_.isNil(agenda));
|
|
125
|
+
if (this.agendas.mongodb) {
|
|
126
|
+
this.registerAgendaEvents(this.agendas.mongodb, 'mongodb');
|
|
127
|
+
}
|
|
128
|
+
if (this.agendas.sqs) {
|
|
129
|
+
this.registerAgendaEvents(this.agendas.sqs, 'sqs');
|
|
130
|
+
}
|
|
131
|
+
await Promise.all(activeAgendas.map((agenda) => agenda.start()));
|
|
132
|
+
if (this.agendas.mongodb) {
|
|
133
|
+
await this.createMongoIndexes(dbManager, queueOptions);
|
|
134
|
+
}
|
|
135
|
+
this.runConfiguredStartupSchedules(jobs);
|
|
136
|
+
}
|
|
137
|
+
hasQueueRuntimeState() {
|
|
138
|
+
return this.queueInitialized || this.jobBackendByName.size > 0 || Object.keys(this.agendas).length > 0;
|
|
139
|
+
}
|
|
140
|
+
async ensureQueueInitialized() {
|
|
141
|
+
if (!this.hasQueueRuntimeState()) {
|
|
142
|
+
await this.handleReady();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
normalizeJobDefinitions(jobs) {
|
|
146
|
+
if (_.isNil(jobs)) {
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
149
|
+
if (Array.isArray(jobs)) {
|
|
150
|
+
return jobs;
|
|
151
|
+
}
|
|
152
|
+
return Object.entries(jobs).map(([name, jobConfig]) => ({
|
|
153
|
+
name,
|
|
154
|
+
...jobConfig
|
|
155
|
+
}));
|
|
129
156
|
}
|
|
130
157
|
/*
|
|
131
|
-
define the jobs... structure is:
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
name: "jobName",
|
|
158
|
+
define the jobs... structure is a map keyed by job name:
|
|
159
|
+
{
|
|
160
|
+
"jobName": {
|
|
135
161
|
options: {}, // optional, see https://github.com/agenda/agenda#defining-job-processors
|
|
136
162
|
fnName: "Fully qualified path to service function name", // e.g. "AgendaQueueService.sampleFunctionToDemonstrateHowToDefineAJobFunction"
|
|
137
163
|
// optional, if you want to in-line schedule a job, based on https://github.com/agenda/agenda#creating-jobs
|
|
@@ -141,8 +167,8 @@ var Services;
|
|
|
141
167
|
data: 'sample log string',
|
|
142
168
|
// options: optional, see: https://github.com/agenda/agenda#repeateveryinterval-options
|
|
143
169
|
}
|
|
144
|
-
|
|
145
|
-
|
|
170
|
+
}
|
|
171
|
+
}
|
|
146
172
|
*/
|
|
147
173
|
defineJobs(jobs, ref = this) {
|
|
148
174
|
_.each(jobs, (job) => {
|
|
@@ -152,11 +178,12 @@ var Services;
|
|
|
152
178
|
sails.log.error(JSON.stringify(job));
|
|
153
179
|
}
|
|
154
180
|
else {
|
|
181
|
+
const agenda = ref.getAgendaForBackend(ref.getBackendForJob(job));
|
|
155
182
|
if (_.isEmpty(job.options)) {
|
|
156
|
-
|
|
183
|
+
agenda.define(job.name, serviceFn);
|
|
157
184
|
}
|
|
158
185
|
else {
|
|
159
|
-
|
|
186
|
+
agenda.define(job.name, serviceFn, job.options);
|
|
160
187
|
}
|
|
161
188
|
sails.log.verbose(`AgendaQueue:: Defined job:`);
|
|
162
189
|
sails.log.verbose(JSON.stringify(job));
|
|
@@ -164,15 +191,18 @@ var Services;
|
|
|
164
191
|
});
|
|
165
192
|
}
|
|
166
193
|
defineJob(name, options, serviceFn) {
|
|
167
|
-
|
|
194
|
+
const backend = this.jobBackendByName.get(name) ?? this.defaultBackend;
|
|
195
|
+
const agenda = this.agendas[backend] ?? this.agenda;
|
|
196
|
+
if (!agenda) {
|
|
168
197
|
sails.log.error(`AgendaQueue:: defineJob called before init for job: ${name}`);
|
|
169
198
|
return;
|
|
170
199
|
}
|
|
200
|
+
this.jobBackendByName.set(name, backend);
|
|
171
201
|
if (_.isEmpty(options)) {
|
|
172
|
-
|
|
202
|
+
agenda.define(name, serviceFn);
|
|
173
203
|
}
|
|
174
204
|
else {
|
|
175
|
-
|
|
205
|
+
agenda.define(name, serviceFn, options);
|
|
176
206
|
}
|
|
177
207
|
sails.log.verbose(`AgendaQueue:: Defined job: ${name}`);
|
|
178
208
|
}
|
|
@@ -184,42 +214,253 @@ var Services;
|
|
|
184
214
|
*/
|
|
185
215
|
async moveCompletedJobsToHistory(_job) {
|
|
186
216
|
const dbManager = User.getDatastore().manager;
|
|
187
|
-
const collectionName = String(_.get(sails.config.agendaQueue, 'collection', 'agendaJobs'));
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
217
|
+
const collectionName = String(_.get(sails.config.agendaQueue, 'options.collection', 'agendaJobs'));
|
|
218
|
+
const jobsCollection = dbManager.collection(collectionName);
|
|
219
|
+
const historyCollection = dbManager.collection(`${collectionName}History`);
|
|
220
|
+
const completedJobs = await jobsCollection.find({ nextRunAt: null }).toArray();
|
|
221
|
+
for (const doc of completedJobs) {
|
|
222
|
+
await historyCollection.replaceOne({ _id: doc._id }, doc, { upsert: true });
|
|
223
|
+
await jobsCollection.deleteOne({ _id: doc._id });
|
|
224
|
+
}
|
|
192
225
|
sails.log.verbose(`moveCompletedJobsToHistory:: Moved completed jobs to history`);
|
|
193
226
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
227
|
+
getDefaultBackend(options) {
|
|
228
|
+
return options.backend ?? 'mongodb';
|
|
229
|
+
}
|
|
230
|
+
getBackendForJob(job) {
|
|
231
|
+
if (job.backend === 'mongodb' || job.backend === 'sqs') {
|
|
232
|
+
return job.backend;
|
|
233
|
+
}
|
|
234
|
+
return this.defaultBackend;
|
|
235
|
+
}
|
|
236
|
+
getBackendForJobName(jobName) {
|
|
237
|
+
const backend = this.jobBackendByName.get(jobName);
|
|
238
|
+
if (_.isNil(backend)) {
|
|
239
|
+
throw new Error(`AgendaQueue:: Unknown job '${jobName}'. Define it in sails.config.agendaQueue.jobs before queuing it.`);
|
|
240
|
+
}
|
|
241
|
+
return backend;
|
|
242
|
+
}
|
|
243
|
+
getAgendaForBackend(backend) {
|
|
244
|
+
const agenda = this.agendas[backend];
|
|
245
|
+
if (_.isNil(agenda)) {
|
|
246
|
+
throw new Error(`AgendaQueue:: No Agenda instance is configured for backend '${backend}'.`);
|
|
247
|
+
}
|
|
248
|
+
return agenda;
|
|
249
|
+
}
|
|
250
|
+
getAgendaForJobName(jobName) {
|
|
251
|
+
return this.getAgendaForBackend(this.getBackendForJobName(jobName));
|
|
252
|
+
}
|
|
253
|
+
ensureRecurringScheduleSupported(jobName) {
|
|
254
|
+
if (this.getBackendForJobName(jobName) === 'sqs') {
|
|
255
|
+
throw new AgendaQueueUnsupportedFeatureError(`AgendaQueue:: every() is not supported for SQS-backed job '${jobName}'. ${EXTERNAL_SCHEDULER_GUIDANCE}`);
|
|
197
256
|
}
|
|
198
257
|
}
|
|
258
|
+
toSerializableJobData(value, seen = new WeakSet()) {
|
|
259
|
+
if (_.isNil(value) || typeof value !== 'object') {
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
if (value instanceof Date || Buffer.isBuffer(value)) {
|
|
263
|
+
return value;
|
|
264
|
+
}
|
|
265
|
+
const bsonLikeValue = value;
|
|
266
|
+
if (_.isString(bsonLikeValue._bsontype)) {
|
|
267
|
+
if (typeof bsonLikeValue.toHexString === 'function') {
|
|
268
|
+
return bsonLikeValue.toHexString();
|
|
269
|
+
}
|
|
270
|
+
if (typeof bsonLikeValue.toJSON === 'function') {
|
|
271
|
+
return this.toSerializableJobData(bsonLikeValue.toJSON(), seen);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (seen.has(value)) {
|
|
275
|
+
return undefined;
|
|
276
|
+
}
|
|
277
|
+
seen.add(value);
|
|
278
|
+
if (Array.isArray(value)) {
|
|
279
|
+
return value.map((item) => this.toSerializableJobData(item, seen));
|
|
280
|
+
}
|
|
281
|
+
return Object.fromEntries(Object.entries(value)
|
|
282
|
+
.map(([key, item]) => [key, this.toSerializableJobData(item, seen)])
|
|
283
|
+
.filter(([, item]) => !_.isUndefined(item)));
|
|
284
|
+
}
|
|
285
|
+
applyCommonAgendaOptions(agendaOptions, options) {
|
|
286
|
+
if (!_.isNil(options.defaultLockLifetime)) {
|
|
287
|
+
agendaOptions.defaultLockLifetime = options.defaultLockLifetime;
|
|
288
|
+
}
|
|
289
|
+
if (!_.isNil(options.processEvery)) {
|
|
290
|
+
agendaOptions.processEvery = options.processEvery;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async createAgendaForBackend(backend, options, dbManager) {
|
|
294
|
+
const { Agenda: AgendaConstructor } = await import('agenda');
|
|
295
|
+
const agendaOptions = {
|
|
296
|
+
backend: undefined
|
|
297
|
+
};
|
|
298
|
+
this.applyCommonAgendaOptions(agendaOptions, options);
|
|
299
|
+
if (backend === 'mongodb') {
|
|
300
|
+
const { MongoBackend } = await import('@agendajs/mongo-backend');
|
|
301
|
+
const datastoreUrl = _.get(sails.config, 'datastores.mongodb.url');
|
|
302
|
+
const address = typeof options.db === 'string' && options.db.length > 0
|
|
303
|
+
? options.db
|
|
304
|
+
: typeof datastoreUrl === 'string' && datastoreUrl.length > 0
|
|
305
|
+
? datastoreUrl
|
|
306
|
+
: undefined;
|
|
307
|
+
agendaOptions.backend = !_.isNil(address)
|
|
308
|
+
? new MongoBackend({ address, collection: options.collection })
|
|
309
|
+
: new MongoBackend({ mongo: dbManager, collection: options.collection });
|
|
310
|
+
return new AgendaConstructor(agendaOptions);
|
|
311
|
+
}
|
|
312
|
+
const sqsOptions = options.sqs;
|
|
313
|
+
if (_.isNil(sqsOptions) || _.isEmpty(sqsOptions.queueUrl)) {
|
|
314
|
+
throw new Error('AgendaQueue:: SQS backend requires agendaQueue.options.sqs.queueUrl.');
|
|
315
|
+
}
|
|
316
|
+
const { SqsBackend } = await import('@researchdatabox/agenda-sqs-backend');
|
|
317
|
+
agendaOptions.backend = new SqsBackend({
|
|
318
|
+
queueUrl: sqsOptions.queueUrl,
|
|
319
|
+
region: sqsOptions.region,
|
|
320
|
+
waitTimeSeconds: sqsOptions.waitTimeSeconds,
|
|
321
|
+
receiveBatchSize: sqsOptions.maxMessagesPerPoll,
|
|
322
|
+
visibilityTimeoutSeconds: sqsOptions.visibilityTimeout,
|
|
323
|
+
fifo: sqsOptions.queueType === 'fifo'
|
|
324
|
+
? {
|
|
325
|
+
enabled: true,
|
|
326
|
+
messageGroupId: sqsOptions.fifoMessageGroupId,
|
|
327
|
+
deduplicationIdStrategy: 'job-id'
|
|
328
|
+
}
|
|
329
|
+
: undefined
|
|
330
|
+
});
|
|
331
|
+
return new AgendaConstructor(agendaOptions);
|
|
332
|
+
}
|
|
333
|
+
registerAgendaEvents(agenda, backend) {
|
|
334
|
+
agenda.on('ready', () => {
|
|
335
|
+
sails.log.verbose(`AgendaQueue:: Started ${backend} backend.`);
|
|
336
|
+
});
|
|
337
|
+
agenda.on('error', (err) => {
|
|
338
|
+
sails.log.error(`AgendaQueue:: ${backend} backend error:`);
|
|
339
|
+
sails.log.error(err instanceof Error ? err.stack ?? err.message : JSON.stringify(err));
|
|
340
|
+
});
|
|
341
|
+
agenda.on('start', (job) => {
|
|
342
|
+
sails.log.verbose(`AgendaQueue:: [${backend}] Job ${job.attrs.name} starting`);
|
|
343
|
+
});
|
|
344
|
+
agenda.on('complete', (job) => {
|
|
345
|
+
sails.log.verbose(`AgendaQueue:: [${backend}] Job ${job.attrs.name} finished`);
|
|
346
|
+
});
|
|
347
|
+
agenda.on('fail', (err, job) => {
|
|
348
|
+
sails.log.error(`AgendaQueue:: [${backend}] Job ${job.attrs.name} failed`);
|
|
349
|
+
sails.log.error(err);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
async createMongoIndexes(dbManager, options) {
|
|
353
|
+
const collectionName = String(options.collection ?? 'agendaJobs');
|
|
354
|
+
await dbManager.collection(collectionName).createIndex({ name: 1, disabled: 1, lockedAt: 1, nextRunAt: 1 });
|
|
355
|
+
await dbManager.collection(collectionName).createIndex({ name: -1, disabled: -1, lockedAt: -1, nextRunAt: -1 });
|
|
356
|
+
}
|
|
357
|
+
runConfiguredStartupSchedules(jobs) {
|
|
358
|
+
_.each(jobs, (job) => {
|
|
359
|
+
if (_.isEmpty(job.schedule)) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
const method = job.schedule?.method;
|
|
363
|
+
const intervalOrSchedule = job.schedule?.intervalOrSchedule;
|
|
364
|
+
const data = job.schedule?.data;
|
|
365
|
+
const opts = job.schedule?.opts;
|
|
366
|
+
if (method === 'now') {
|
|
367
|
+
this.now(job.name, data);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
if (method === 'every' && intervalOrSchedule) {
|
|
371
|
+
this.every(job.name, intervalOrSchedule, data, opts);
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
if (method === 'schedule' && intervalOrSchedule) {
|
|
375
|
+
this.schedule(job.name, intervalOrSchedule, data);
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
sails.log.error('AgendaQueue:: incorrect job schedule definition, method not found:');
|
|
379
|
+
sails.log.error(JSON.stringify(job));
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
ensureScheduleSupported(jobName, schedule, data) {
|
|
383
|
+
if (this.getBackendForJobName(jobName) !== 'sqs') {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
const agenda = this.getAgendaForJobName(jobName);
|
|
387
|
+
const scheduledJob = agenda.create(jobName, data).schedule(schedule);
|
|
388
|
+
const nextRunAt = scheduledJob.attrs.nextRunAt;
|
|
389
|
+
if (!(nextRunAt instanceof Date) || Number.isNaN(nextRunAt.getTime())) {
|
|
390
|
+
throw new Error(`AgendaQueue:: schedule() received an invalid schedule for SQS-backed job '${jobName}'.`);
|
|
391
|
+
}
|
|
392
|
+
const delayMs = nextRunAt.getTime() - Date.now();
|
|
393
|
+
if (delayMs > 15 * 60 * 1000) {
|
|
394
|
+
throw new AgendaQueueUnsupportedFeatureError(`AgendaQueue:: schedule() only supports delays up to 15 minutes for SQS-backed job '${jobName}'.`);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
queryTargetsSqsJobs(query) {
|
|
398
|
+
if (_.isNil(query) || _.isNil(query.name)) {
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
const nameQuery = query.name;
|
|
402
|
+
if (_.isString(nameQuery)) {
|
|
403
|
+
return this.jobBackendByName.get(nameQuery) === 'sqs';
|
|
404
|
+
}
|
|
405
|
+
if (_.isPlainObject(nameQuery)) {
|
|
406
|
+
const structuredNameQuery = nameQuery;
|
|
407
|
+
const supportedKeys = ['$in'];
|
|
408
|
+
const nameQueryKeys = Object.keys(structuredNameQuery);
|
|
409
|
+
const hasOnlySupportedKeys = nameQueryKeys.length > 0 && nameQueryKeys.every((key) => supportedKeys.includes(key));
|
|
410
|
+
if (!hasOnlySupportedKeys) {
|
|
411
|
+
throw new AgendaQueueUnsupportedFeatureError('AgendaQueue:: jobs() only supports name queries using an exact string or $in when SQS-backed jobs are configured.');
|
|
412
|
+
}
|
|
413
|
+
const inNames = structuredNameQuery.$in;
|
|
414
|
+
if (!Array.isArray(inNames) || !inNames.every((name) => _.isString(name))) {
|
|
415
|
+
throw new AgendaQueueUnsupportedFeatureError('AgendaQueue:: jobs() only supports name queries using an exact string or $in when SQS-backed jobs are configured.');
|
|
416
|
+
}
|
|
417
|
+
return inNames.some((name) => this.jobBackendByName.get(name) === 'sqs');
|
|
418
|
+
}
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
toJobsQueryOptions(query) {
|
|
422
|
+
if (_.isNil(query?.name)) {
|
|
423
|
+
return undefined;
|
|
424
|
+
}
|
|
425
|
+
if (_.isString(query.name)) {
|
|
426
|
+
return { name: query.name };
|
|
427
|
+
}
|
|
428
|
+
return { names: query.name.$in };
|
|
429
|
+
}
|
|
199
430
|
async sampleFunctionToDemonstrateHowToDefineAJobFunction(job) {
|
|
200
431
|
sails.log.info(`AgendaQueue:: sample function called by job: `);
|
|
201
432
|
sails.log.info(JSON.stringify(job));
|
|
202
433
|
}
|
|
203
434
|
every(jobName, interval, data = undefined, options = undefined) {
|
|
204
|
-
this.
|
|
435
|
+
this.ensureRecurringScheduleSupported(jobName);
|
|
436
|
+
void this.getAgendaForJobName(jobName).every(interval, jobName, this.toSerializableJobData(data), options);
|
|
205
437
|
}
|
|
206
438
|
schedule(jobName, schedule, data = undefined) {
|
|
207
|
-
this.
|
|
439
|
+
this.ensureScheduleSupported(jobName, schedule, data);
|
|
440
|
+
void this.getAgendaForJobName(jobName).schedule(schedule, jobName, this.toSerializableJobData(data));
|
|
208
441
|
}
|
|
209
|
-
now(jobName, data = undefined) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
this.agenda.now(jobName, data);
|
|
442
|
+
async now(jobName, data = undefined) {
|
|
443
|
+
if (!this.hasQueueRuntimeState()) {
|
|
444
|
+
await this.handleReady();
|
|
213
445
|
}
|
|
214
|
-
|
|
446
|
+
sails.log.verbose(`AgendaQueue:: Starting job: '${jobName}' now!`);
|
|
447
|
+
const queuedJob = this.getAgendaForJobName(jobName).now(jobName, this.toSerializableJobData(data));
|
|
448
|
+
queuedJob.catch((e) => {
|
|
215
449
|
sails.log.error(`AgendaQueue:: Failed to start job now: ${jobName}`);
|
|
216
450
|
sails.log.error(e);
|
|
217
|
-
}
|
|
451
|
+
});
|
|
452
|
+
return await queuedJob;
|
|
218
453
|
}
|
|
219
|
-
async jobs(query
|
|
220
|
-
|
|
454
|
+
async jobs(query) {
|
|
455
|
+
if (_.isNil(this.agendas.mongodb)) {
|
|
456
|
+
throw new AgendaQueueUnsupportedFeatureError('AgendaQueue:: jobs() is only supported when a MongoDB-backed agenda is configured.');
|
|
457
|
+
}
|
|
458
|
+
if (this.queryTargetsSqsJobs(query)) {
|
|
459
|
+
throw new AgendaQueueUnsupportedFeatureError('AgendaQueue:: jobs() is not supported for SQS-backed jobs.');
|
|
460
|
+
}
|
|
461
|
+
return await this.agendas.mongodb.queryJobs(this.toJobsQueryOptions(query));
|
|
221
462
|
}
|
|
222
463
|
}
|
|
223
464
|
Services.AgendaQueue = AgendaQueue;
|
|
224
465
|
})(Services || (exports.Services = Services = {}));
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbmRhUXVldWVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FnZW5kYVF1ZXVlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7OztBQUU5RCwwRkFBMEY7QUFDMUYsRUFBRTtBQUNGLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsRUFBRTtBQUNGLHVFQUF1RTtBQUN2RSx1RUFBdUU7QUFDdkUsb0VBQW9FO0FBQ3BFLHNDQUFzQztBQUN0QyxFQUFFO0FBQ0Ysa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLDhEQUE4RDtBQUc5RCxnREFBc0Q7QUFHdEQsbUNBQTBDO0FBbUIxQyxJQUFpQixRQUFRLENBOEx4QjtBQTlMRCxXQUFpQixRQUFRO0lBQ3ZCOzs7T0FHRztJQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFRLENBQUMsSUFBSSxDQUFDLE9BQU87UUFDakMsZ0JBQWdCLEdBQWE7WUFDOUMsT0FBTztZQUNQLFVBQVU7WUFDVixLQUFLO1lBQ0wsTUFBTTtZQUNOLG9EQUFvRDtZQUNwRCxXQUFXO1lBQ1gsNEJBQTRCO1lBQzVCLE1BQU07U0FDUCxDQUFDO1FBRVEsTUFBTSxDQUFVO1FBRTFCO1lBQ0UsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO1FBRUQ7Ozs7O1dBS0c7UUFDYSxLQUFLLENBQUMsSUFBSTtZQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSztnQkFFekMsMEZBQTBGO2dCQUMxRixNQUFNLFVBQVUsR0FBNEIsRUFBRSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQWtCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO29CQUNwRixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFDOUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDM0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQzlCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBQ3hDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ25DLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFFLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUN0QyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7b0JBQzlELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRTFCLG1DQUFtQztnQkFDbkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVHLE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUVoSCxpQ0FBaUM7Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBYyxFQUFFLEVBQUU7b0JBQ3ZELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO3dCQUM3QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzt3QkFDbkMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO3dCQUMzRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDL0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFzRixDQUFDO3dCQUNqSCxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQzs0QkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO3dCQUMxQixDQUFDOzZCQUFNLElBQUksTUFBTSxJQUFJLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDOzRCQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUN2RCxDQUFDOzZCQUFNLElBQUksTUFBTSxJQUFJLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDOzRCQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ3BELENBQUM7NkJBQU0sQ0FBQzs0QkFDTixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDOzRCQUN0RixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVEOzs7Ozs7Ozs7Ozs7Ozs7O1dBZ0JHO1FBQ0ksVUFBVSxDQUFDLElBQWlCLEVBQUUsTUFBbUIsSUFBSTtZQUMxRCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQWMsRUFBRSxFQUFFO2dCQUM5QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBNEMsQ0FBQztnQkFDL0YsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDJCQUEyQixHQUFHLENBQUMsSUFBSSxrQ0FBa0MsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQ25HLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUF3QyxDQUFDLENBQUM7b0JBQ3hFLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQXdDLEVBQUUsR0FBRyxDQUFDLE9BQTBDLENBQUMsQ0FBQztvQkFDeEgsQ0FBQztvQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO29CQUNoRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFTSxTQUFTLENBQUMsSUFBWSxFQUFFLE9BQWdCLEVBQUUsU0FBMkI7WUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsdURBQXVELElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQy9FLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUF3QyxDQUFDLENBQUM7WUFDckUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUF3QyxFQUFFLE9BQTBDLENBQUMsQ0FBQztZQUNqSCxDQUFDO1lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsOEJBQThCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVEOzs7OztXQUtHO1FBQ0ksS0FBSyxDQUFDLDBCQUEwQixDQUFDLElBQVM7WUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUM5QyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMzRixNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUE0QixFQUFFLEVBQUU7Z0JBQ2xILE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGNBQWMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFHLEdBQXlCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoRyxDQUFDLENBQUMsQ0FBQztZQUVILEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUdPLGtCQUFrQixDQUFDLFVBQW1DLEVBQUUsVUFBa0IsRUFBRSxTQUFrQjtZQUNwRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMxQixDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFFTSxLQUFLLENBQUMsa0RBQWtELENBQUMsR0FBWTtZQUMxRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRU0sS0FBSyxDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFFLE9BQWdCLFNBQVMsRUFBRSxVQUEwRixTQUFTO1lBQzVLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFTSxRQUFRLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQUUsT0FBZ0IsU0FBUztZQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFTSxHQUFHLENBQUMsT0FBZSxFQUFFLE9BQWdCLFNBQVM7WUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLE9BQU8sUUFBUSxDQUFDLENBQUE7WUFDbEUsSUFBSSxDQUFDO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDckUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7UUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQXlCLEVBQUUsRUFBRSxPQUFhLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ2pGLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxDQUFDO0tBQ0Y7SUF4TFksb0JBQVcsY0F3THZCLENBQUE7QUFDSCxDQUFDLEVBOUxnQixRQUFRLHdCQUFSLFFBQVEsUUE4THhCIn0=
|
|
466
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbmRhUXVldWVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0FnZW5kYVF1ZXVlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7OztBQUU5RCwwRkFBMEY7QUFDMUYsRUFBRTtBQUNGLDZCQUE2QjtBQUM3QiwwQkFBMEI7QUFDMUIsRUFBRTtBQUNGLHVFQUF1RTtBQUN2RSx1RUFBdUU7QUFDdkUsb0VBQW9FO0FBQ3BFLHNDQUFzQztBQUN0QyxFQUFFO0FBQ0Ysa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsMEVBQTBFO0FBQzFFLDhEQUE4RDtBQUc5RCxnREFBc0Q7QUFvQnRELE1BQWEsa0NBQW1DLFNBQVEsS0FBSztJQUMzRCxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxvQ0FBb0MsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUFMRCxnRkFLQztBQUdELElBQWlCLFFBQVEsQ0F1ZXhCO0FBdmVELFdBQWlCLFFBQVE7SUFDdkIsTUFBTSwyQkFBMkIsR0FBRywwREFBMEQsQ0FBQztJQUUvRjs7O09BR0c7SUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ2pDLGdCQUFnQixHQUFhO1lBQzlDLE9BQU87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
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { BrandingModel } from '../model/storage/BrandingModel';
|
|
2
2
|
import { AppConfigAttributes } from '../waterline-models/AppConfig';
|
|
3
3
|
import { Services as services } from '../CoreService';
|
|
4
|
+
import { type ConfigModelFormAdapter } from '../configmodels/ConfigModels';
|
|
4
5
|
import type { BrandingConfigurationDefaultsConfig } from '../config/brandingConfigurationDefaults.config';
|
|
5
6
|
import type { AuthorizedDomainsEmails } from '../configmodels/AuthorizedDomainsEmails';
|
|
7
|
+
export declare const APP_CONFIG_SECRET_MASK = "__REDACTED__";
|
|
8
|
+
export declare const APP_CONFIG_SECRET_CLEAR = "__CLEAR_SECRET__";
|
|
9
|
+
type AppConfigData = Record<string, unknown>;
|
|
6
10
|
export declare namespace Services {
|
|
7
11
|
/**
|
|
8
12
|
* AppConfig related functions...
|
|
@@ -20,16 +24,27 @@ export declare namespace Services {
|
|
|
20
24
|
private bootstrapAsync;
|
|
21
25
|
initAllConfigFormSchemas(): Promise<void>;
|
|
22
26
|
private refreshBrandingAppConfigMap;
|
|
27
|
+
private getSecretFields;
|
|
28
|
+
private isMaskedSecretPlaceholder;
|
|
29
|
+
private shouldMaskSecretValue;
|
|
30
|
+
private maskSecretFields;
|
|
31
|
+
private mergeSecretFields;
|
|
32
|
+
private prepareConfigModelForForm;
|
|
33
|
+
private prepareConfigModelForSave;
|
|
23
34
|
getAppConfigurationForBrand(brandName: string): BrandingConfigurationDefaultsConfig & {
|
|
24
35
|
authorizedDomainsEmails?: AuthorizedDomainsEmails;
|
|
25
36
|
};
|
|
26
37
|
getAllConfigurationForBrand: (brandId: string) => Promise<AppConfigAttributes[]>;
|
|
38
|
+
private getConfigRecordTimestamp;
|
|
39
|
+
private chooseLatestConfigRecord;
|
|
40
|
+
private reduceToLatestConfigRecords;
|
|
41
|
+
private findLatestConfigRecord;
|
|
27
42
|
loadAppConfigurationModel(brandId: string): Promise<BrandingConfigurationDefaultsConfig & {
|
|
28
43
|
authorizedDomainsEmails?: AuthorizedDomainsEmails;
|
|
29
44
|
}>;
|
|
30
45
|
getAppConfigByBrandAndKey(brandId: string, configKey: string): Promise<unknown>;
|
|
31
|
-
createOrUpdateConfig(branding: BrandingModel, configKey: string, configData:
|
|
32
|
-
createConfig(brandName: string, configKey: string, configData:
|
|
46
|
+
createOrUpdateConfig(branding: BrandingModel, configKey: string, configData: AppConfigData): Promise<unknown>;
|
|
47
|
+
createConfig(brandName: string, configKey: string, configData: AppConfigData): Promise<unknown>;
|
|
33
48
|
getAppConfigForm(branding: BrandingModel, configForm: string): Promise<{
|
|
34
49
|
model: object;
|
|
35
50
|
schema: unknown;
|
|
@@ -50,10 +65,13 @@ export declare namespace Services {
|
|
|
50
65
|
};
|
|
51
66
|
schema?: unknown;
|
|
52
67
|
tsGlob?: string | string[];
|
|
68
|
+
secretFields?: string[];
|
|
69
|
+
formAdapter?: ConfigModelFormAdapter;
|
|
53
70
|
}): void;
|
|
54
71
|
}
|
|
55
72
|
}
|
|
56
73
|
declare global {
|
|
57
74
|
let AppConfigService: Services.AppConfigs;
|
|
58
75
|
}
|
|
76
|
+
export {};
|
|
59
77
|
//# sourceMappingURL=AppConfigService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppConfigService.d.ts","sourceRoot":"","sources":["../../src/services/AppConfigService.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"AppConfigService.d.ts","sourceRoot":"","sources":["../../src/services/AppConfigService.ts"],"names":[],"mappings":"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"}
|