@researchdatabox/redbox-core 5.0.4-beta.12498 → 5.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CoreController.d.ts +3 -7
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +3 -85
- package/dist/DatastreamService.d.ts +2 -4
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/HarvestRunService.d.ts +3 -4
- package/dist/HarvestRunService.d.ts.map +1 -1
- package/dist/HarvestRunService.js +1 -1
- package/dist/QueueService.d.ts +1 -1
- package/dist/QueueService.d.ts.map +1 -1
- package/dist/RecordWriteOptions.d.ts +21 -0
- package/dist/RecordWriteOptions.d.ts.map +1 -0
- package/dist/RecordWriteOptions.js +17 -0
- package/dist/RecordsService.d.ts +14 -105
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/RecordsService.js +1 -44
- package/dist/SearchService.d.ts +1 -2
- package/dist/SearchService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +20 -48
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/StorageService.js +1 -19
- package/dist/StorageServiceResponse.d.ts +1 -22
- package/dist/StorageServiceResponse.d.ts.map +1 -1
- package/dist/StorageServiceResponse.js +4 -22
- package/dist/api-routes/groups/branding.d.ts +0 -8
- package/dist/api-routes/groups/branding.d.ts.map +1 -1
- package/dist/api-routes/groups/branding.js +11 -86
- package/dist/api-routes/groups/dashboard-config.d.ts +9 -12
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -1
- package/dist/api-routes/groups/dashboard-config.js +73 -136
- package/dist/api-routes/groups/forms.d.ts.map +1 -1
- package/dist/api-routes/groups/forms.js +2 -10
- package/dist/api-routes/groups/records.d.ts +0 -1
- package/dist/api-routes/groups/records.d.ts.map +1 -1
- package/dist/api-routes/groups/records.js +26 -141
- package/dist/api-routes/index.d.ts +0 -3
- package/dist/api-routes/index.d.ts.map +1 -1
- package/dist/api-routes/index.js +1 -4
- package/dist/api-routes/openapi.d.ts.map +1 -1
- package/dist/api-routes/openapi.js +5 -7
- package/dist/api-routes/request-extraction.d.ts.map +1 -1
- package/dist/api-routes/request-extraction.js +8 -10
- package/dist/api-routes/route-factory.d.ts.map +1 -1
- package/dist/api-routes/route-factory.js +1 -2
- package/dist/api-routes/route-registry.d.ts.map +1 -1
- package/dist/api-routes/route-registry.js +1 -3
- package/dist/api-routes/schemas/common.d.ts +0 -36
- package/dist/api-routes/schemas/common.d.ts.map +1 -1
- package/dist/api-routes/schemas/common.js +5 -95
- package/dist/api-routes/schemas/responses.d.ts +1 -1424
- package/dist/api-routes/schemas/responses.d.ts.map +1 -1
- package/dist/api-routes/schemas/responses.js +60 -382
- package/dist/api-routes/types.d.ts +0 -1
- package/dist/api-routes/types.d.ts.map +1 -1
- package/dist/api-routes/validation.d.ts +1 -5
- package/dist/api-routes/validation.d.ts.map +1 -1
- package/dist/api-routes/validation.js +15 -14
- package/dist/bootstrap.d.ts +1 -3
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +41 -58
- package/dist/config/agendaQueue.config.d.ts +0 -3
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +11 -29
- package/dist/config/branding.config.d.ts +0 -13
- package/dist/config/branding.config.d.ts.map +1 -1
- package/dist/config/branding.config.js +2 -34
- package/dist/config/brandingConfigurationDefaults.config.d.ts +0 -4
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +3 -42
- package/dist/config/datapubs.config.d.ts +72 -0
- package/dist/config/datapubs.config.d.ts.map +1 -0
- package/dist/config/datapubs.config.js +74 -0
- package/dist/config/i18n.config.d.ts +4 -0
- package/dist/config/i18n.config.d.ts.map +1 -1
- package/dist/config/i18n.config.js +1 -1
- package/dist/config/index.d.ts +4 -12
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -7
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +23 -37
- package/dist/config/raid.config.d.ts +4 -7
- package/dist/config/raid.config.d.ts.map +1 -1
- package/dist/config/raid.config.js +35 -21
- package/dist/config/record.config.d.ts +0 -3
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +35 -37
- package/dist/config/recordtype.config.d.ts +9 -32
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +7 -4
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +53 -135
- package/dist/config/workflow.config.d.ts +0 -6
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -1
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +2 -4
- package/dist/configmodels/ConfigModels.d.ts +1 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +9 -26
- package/dist/configmodels/FigsharePublishing.d.ts +103 -0
- package/dist/configmodels/FigsharePublishing.d.ts.map +1 -1
- package/dist/configmodels/FigsharePublishing.js +36 -2
- package/dist/controllers/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/AppConfigController.js +1 -4
- package/dist/controllers/BrandingAppController.d.ts +7 -29
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +69 -265
- package/dist/controllers/BrandingController.d.ts +1 -24
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +43 -173
- package/dist/controllers/DashboardConfigController.d.ts +2 -6
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/DashboardConfigController.js +4 -18
- package/dist/controllers/DynamicAssetController.d.ts +5 -7
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +12 -21
- package/dist/controllers/RecordAuditController.d.ts.map +1 -1
- package/dist/controllers/RecordAuditController.js +24 -6
- package/dist/controllers/RecordController.d.ts +4 -45
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +345 -778
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +1 -4
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +3 -4
- package/dist/controllers/webservice/BrandingController.d.ts +1 -26
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +116 -292
- package/dist/controllers/webservice/DashboardConfigController.d.ts +17 -25
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/DashboardConfigController.js +205 -90
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +3 -37
- package/dist/controllers/webservice/RecordController.d.ts +1 -15
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +267 -647
- package/dist/controllers/webservice/RecordTypeController.d.ts +1 -6
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +3 -21
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +3 -7
- package/dist/hooks/defineRedboxHook.d.ts +0 -3
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
- package/dist/hooks/defineRedboxHook.js +1 -4
- package/dist/index.d.ts +25 -50
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -90
- package/dist/loader/bootstrapShimRuntime.d.ts +1 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +12 -20
- package/dist/loader/index.d.ts +0 -9
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +4 -93
- package/dist/model/BuildResponse.d.ts +11 -25
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/BuildResponse.js +3 -4
- package/dist/model/DashboardTypeResponseModel.d.ts +0 -6
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +1 -7
- package/dist/model/DashboardViewResponseModel.d.ts +1 -5
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardViewResponseModel.js +3 -6
- package/dist/model/RBValidationError.d.ts +0 -17
- package/dist/model/RBValidationError.d.ts.map +1 -1
- package/dist/model/RBValidationError.js +1 -37
- package/dist/model/RecordTypeResponseModel.d.ts +4 -12
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +2 -11
- package/dist/model/index.d.ts +1 -5
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +2 -5
- package/dist/model/storage/BrandingModel.d.ts +0 -7
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +1 -7
- package/dist/model/storage/DeletedRecordModel.d.ts +0 -35
- package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -1
- package/dist/model/storage/DeletedRecordModel.js +1 -62
- package/dist/model/storage/FigshareSyncModel.d.ts +126 -0
- package/dist/model/storage/FigshareSyncModel.d.ts.map +1 -0
- package/dist/model/storage/FigshareSyncModel.js +3 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts +2 -16
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
- package/dist/model/storage/IntegrationAuditModel.js +1 -15
- package/dist/model/storage/RecordAuditModel.d.ts +4 -11
- package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
- package/dist/model/storage/RecordAuditModel.js +30 -8
- package/dist/model/storage/RecordModel.d.ts +3 -6
- package/dist/model/storage/RecordModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.d.ts +0 -6
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +1 -4
- package/dist/model/storage/index.d.ts +10 -12
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +2 -24
- package/dist/policies/checkAuth.d.ts +6 -2
- package/dist/policies/checkAuth.d.ts.map +1 -1
- package/dist/policies/checkAuth.js +9 -32
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +2 -85
- package/dist/policies/index.d.ts +2 -3
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +2 -4
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -1
- package/dist/policies/validateApiContractRequest.js +11 -49
- package/dist/services/AgendaQueueService.d.ts +1 -1
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +7 -4
- package/dist/services/AppConfigService.d.ts +0 -6
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +1 -23
- package/dist/services/AttachmentMetadataService.d.ts +0 -58
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -1
- package/dist/services/AttachmentMetadataService.js +8 -643
- package/dist/services/BrandingLogoService.d.ts +1 -6
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +9 -77
- package/dist/services/BrandingService.d.ts +9 -171
- package/dist/services/BrandingService.d.ts.map +1 -1
- package/dist/services/BrandingService.js +68 -572
- package/dist/services/BrandingThemeCssService.d.ts +1 -17
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
- package/dist/services/BrandingThemeCssService.js +9 -71
- package/dist/services/DashboardConfigService.d.ts +54 -214
- package/dist/services/DashboardConfigService.d.ts.map +1 -1
- package/dist/services/DashboardConfigService.js +261 -829
- package/dist/services/DashboardTypesService.d.ts +4 -15
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +139 -72
- package/dist/services/DoiService.d.ts +1 -1
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +45 -71
- package/dist/services/FigshareService.d.ts +15 -10
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +82 -583
- package/dist/services/FormRecordConsistencyService.d.ts +23 -8
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +70 -54
- package/dist/services/FormsService.d.ts +2 -91
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +64 -324
- package/dist/services/HarvestRunService.d.ts +3 -6
- package/dist/services/HarvestRunService.d.ts.map +1 -1
- package/dist/services/HarvestRunService.js +97 -161
- package/dist/services/I18nEntriesService.d.ts +2 -1
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +45 -30
- package/dist/services/OniService.d.ts +62 -19
- package/dist/services/OniService.d.ts.map +1 -1
- package/dist/services/OniService.js +691 -223
- package/dist/services/RDMPService.d.ts +1 -1
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +5 -5
- package/dist/services/RaidService.d.ts +61 -19
- package/dist/services/RaidService.d.ts.map +1 -1
- package/dist/services/RaidService.js +530 -191
- package/dist/services/RecordTypesService.d.ts +0 -29
- package/dist/services/RecordTypesService.d.ts.map +1 -1
- package/dist/services/RecordTypesService.js +11 -106
- package/dist/services/RecordsService.d.ts +26 -313
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +763 -5089
- package/dist/services/SolrSearchService.d.ts +1 -1
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +12 -42
- package/dist/services/StandardDatastreamService.d.ts +5 -4
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +61 -106
- package/dist/services/TriggerService.d.ts.map +1 -1
- package/dist/services/TriggerService.js +30 -54
- package/dist/services/UsersService.d.ts +1 -2
- package/dist/services/UsersService.d.ts.map +1 -1
- package/dist/services/UsersService.js +283 -364
- package/dist/services/VocabularyService.d.ts +0 -2
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +2 -61
- package/dist/services/WorkflowStepsService.d.ts +0 -11
- package/dist/services/WorkflowStepsService.d.ts.map +1 -1
- package/dist/services/WorkflowStepsService.js +3 -32
- package/dist/services/WorkspaceService.d.ts +2 -2
- package/dist/services/WorkspaceService.d.ts.map +1 -1
- package/dist/services/WorkspaceService.js +5 -5
- package/dist/services/doi-v2/bindings.d.ts.map +1 -1
- package/dist/services/doi-v2/bindings.js +20 -3
- package/dist/services/doi-v2/config.d.ts +0 -1
- package/dist/services/doi-v2/config.d.ts.map +1 -1
- package/dist/services/doi-v2/config.js +5 -13
- package/dist/services/doi-v2/runtime.d.ts.map +1 -1
- package/dist/services/doi-v2/runtime.js +54 -14
- package/dist/services/figshare-v2/admin.d.ts +16 -0
- package/dist/services/figshare-v2/admin.d.ts.map +1 -0
- package/dist/services/figshare-v2/admin.js +283 -0
- package/dist/services/figshare-v2/assets.d.ts +20 -1
- package/dist/services/figshare-v2/assets.d.ts.map +1 -1
- package/dist/services/figshare-v2/assets.js +16 -1
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
- package/dist/services/figshare-v2/bindings.js +20 -3
- package/dist/services/figshare-v2/config.d.ts +8 -2
- package/dist/services/figshare-v2/config.d.ts.map +1 -1
- package/dist/services/figshare-v2/config.js +31 -3
- package/dist/services/figshare-v2/execution.d.ts +25 -0
- package/dist/services/figshare-v2/execution.d.ts.map +1 -0
- package/dist/services/figshare-v2/execution.js +49 -0
- package/dist/services/figshare-v2/http.d.ts +6 -1
- package/dist/services/figshare-v2/http.d.ts.map +1 -1
- package/dist/services/figshare-v2/http.js +69 -12
- package/dist/services/figshare-v2/identity.d.ts +12 -0
- package/dist/services/figshare-v2/identity.d.ts.map +1 -0
- package/dist/services/figshare-v2/identity.js +78 -0
- package/dist/services/figshare-v2/managed-assets.d.ts +9 -0
- package/dist/services/figshare-v2/managed-assets.d.ts.map +1 -0
- package/dist/services/figshare-v2/managed-assets.js +229 -0
- package/dist/services/figshare-v2/plan.d.ts.map +1 -1
- package/dist/services/figshare-v2/plan.js +2 -9
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +58 -11
- package/dist/services/figshare-v2/source-intent.d.ts +9 -0
- package/dist/services/figshare-v2/source-intent.d.ts.map +1 -0
- package/dist/services/figshare-v2/source-intent.js +93 -0
- package/dist/services/figshare-v2/status.d.ts +4 -0
- package/dist/services/figshare-v2/status.d.ts.map +1 -0
- package/dist/services/figshare-v2/status.js +29 -0
- package/dist/services/figshare-v2/sync-store.d.ts +27 -0
- package/dist/services/figshare-v2/sync-store.d.ts.map +1 -0
- package/dist/services/figshare-v2/sync-store.js +139 -0
- package/dist/services/figshare-v2/types.d.ts +3 -0
- package/dist/services/figshare-v2/types.d.ts.map +1 -1
- package/dist/services/figshare-v2/types.js +1 -1
- package/dist/services/figshare-v2/worker.d.ts +16 -0
- package/dist/services/figshare-v2/worker.d.ts.map +1 -0
- package/dist/services/figshare-v2/worker.js +572 -0
- package/dist/services/index.d.ts +0 -9
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -45
- package/dist/utilities/TranslationHtml.d.ts +3 -0
- package/dist/utilities/TranslationHtml.d.ts.map +1 -0
- package/dist/utilities/TranslationHtml.js +46 -0
- package/dist/visitor/client.visitor.d.ts +0 -6
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +14 -59
- package/dist/visitor/construct.visitor.d.ts +1 -27
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +177 -265
- package/dist/visitor/context-variables.visitor.d.ts +1 -3
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +1 -15
- package/dist/visitor/data-value.visitor.d.ts +0 -6
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +1 -10
- package/dist/visitor/json-type-def.visitor.d.ts +0 -6
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +1 -10
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +0 -11
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +133 -228
- package/dist/visitor/template.visitor.d.ts +2 -17
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +22 -60
- package/dist/visitor/validator.visitor.d.ts +7 -49
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +178 -275
- package/dist/waterline-models/AttachmentMetadata.d.ts +0 -22
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -1
- package/dist/waterline-models/AttachmentMetadata.js +3 -147
- package/dist/waterline-models/BrandingConfig.d.ts +0 -7
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +1 -16
- package/dist/waterline-models/BrandingConfigHistory.d.ts +2 -11
- package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfigHistory.js +1 -21
- package/dist/waterline-models/FigshareSync.d.ts +41 -0
- package/dist/waterline-models/FigshareSync.d.ts.map +1 -0
- package/dist/waterline-models/FigshareSync.js +168 -0
- package/dist/waterline-models/RecordType.d.ts +0 -9
- package/dist/waterline-models/RecordType.d.ts.map +1 -1
- package/dist/waterline-models/RecordType.js +1 -16
- package/dist/waterline-models/User.d.ts.map +1 -1
- package/dist/waterline-models/User.js +15 -10
- package/dist/waterline-models/index.d.ts +2 -2
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +4 -4
- package/package.json +46 -59
- package/dist/AttachmentStagingIdentity.d.ts +0 -3
- package/dist/AttachmentStagingIdentity.d.ts.map +0 -1
- package/dist/AttachmentStagingIdentity.js +0 -10
- package/dist/RecordConcurrencyObservability.d.ts +0 -51
- package/dist/RecordConcurrencyObservability.d.ts.map +0 -1
- package/dist/RecordConcurrencyObservability.js +0 -136
- package/dist/RecordEntityTag.d.ts +0 -31
- package/dist/RecordEntityTag.d.ts.map +0 -1
- package/dist/RecordEntityTag.js +0 -101
- package/dist/RecordFormFingerprint.d.ts +0 -7
- package/dist/RecordFormFingerprint.d.ts.map +0 -1
- package/dist/RecordFormFingerprint.js +0 -106
- package/dist/RecordHttpConcurrency.d.ts +0 -60
- package/dist/RecordHttpConcurrency.d.ts.map +0 -1
- package/dist/RecordHttpConcurrency.js +0 -181
- package/dist/RecordSaveResponse.d.ts +0 -219
- package/dist/RecordSaveResponse.d.ts.map +0 -1
- package/dist/RecordSaveResponse.js +0 -639
- package/dist/RecordStorageConcurrency.d.ts +0 -48
- package/dist/RecordStorageConcurrency.d.ts.map +0 -1
- package/dist/RecordStorageConcurrency.js +0 -103
- package/dist/RecordWriteClassification.d.ts +0 -12
- package/dist/RecordWriteClassification.d.ts.map +0 -1
- package/dist/RecordWriteClassification.js +0 -70
- package/dist/action-execution/audit.d.ts +0 -41
- package/dist/action-execution/audit.d.ts.map +0 -1
- package/dist/action-execution/audit.js +0 -122
- package/dist/action-execution/executor.d.ts +0 -24
- package/dist/action-execution/executor.d.ts.map +0 -1
- package/dist/action-execution/executor.js +0 -435
- package/dist/action-execution/failure.d.ts +0 -49
- package/dist/action-execution/failure.d.ts.map +0 -1
- package/dist/action-execution/failure.js +0 -129
- package/dist/action-execution/index.d.ts +0 -7
- package/dist/action-execution/index.d.ts.map +0 -1
- package/dist/action-execution/index.js +0 -23
- package/dist/action-execution/legacy-result.d.ts +0 -21
- package/dist/action-execution/legacy-result.d.ts.map +0 -1
- package/dist/action-execution/legacy-result.js +0 -70
- package/dist/action-execution/policy.d.ts +0 -12
- package/dist/action-execution/policy.d.ts.map +0 -1
- package/dist/action-execution/policy.js +0 -138
- package/dist/action-execution/types.d.ts +0 -121
- package/dist/action-execution/types.d.ts.map +0 -1
- package/dist/action-execution/types.js +0 -22
- package/dist/api-routes/groups/record-schemas.d.ts +0 -5
- package/dist/api-routes/groups/record-schemas.d.ts.map +0 -1
- package/dist/api-routes/groups/record-schemas.js +0 -181
- package/dist/api-routes/record-schema-openapi.d.ts +0 -26
- package/dist/api-routes/record-schema-openapi.d.ts.map +0 -1
- package/dist/api-routes/record-schema-openapi.js +0 -38
- package/dist/api-routes/record-schema-response.d.ts +0 -40
- package/dist/api-routes/record-schema-response.d.ts.map +0 -1
- package/dist/api-routes/record-schema-response.js +0 -89
- package/dist/config/recordSchema.config.d.ts +0 -68
- package/dist/config/recordSchema.config.d.ts.map +0 -1
- package/dist/config/recordSchema.config.js +0 -173
- package/dist/config/recordValidation.config.d.ts +0 -19
- package/dist/config/recordValidation.config.d.ts.map +0 -1
- package/dist/config/recordValidation.config.js +0 -10
- package/dist/configmodels/DashboardFieldCatalogue.d.ts +0 -67
- package/dist/configmodels/DashboardFieldCatalogue.d.ts.map +0 -1
- package/dist/configmodels/DashboardFieldCatalogue.js +0 -174
- package/dist/configmodels/DashboardSettings.d.ts +0 -191
- package/dist/configmodels/DashboardSettings.d.ts.map +0 -1
- package/dist/configmodels/DashboardSettings.js +0 -705
- package/dist/configmodels/OniPublishing.d.ts +0 -205
- package/dist/configmodels/OniPublishing.d.ts.map +0 -1
- package/dist/configmodels/OniPublishing.js +0 -335
- package/dist/configmodels/RaidPublishing.d.ts +0 -97
- package/dist/configmodels/RaidPublishing.d.ts.map +0 -1
- package/dist/configmodels/RaidPublishing.js +0 -35
- package/dist/configmodels/WebAnalytics.d.ts +0 -55
- package/dist/configmodels/WebAnalytics.d.ts.map +0 -1
- package/dist/configmodels/WebAnalytics.js +0 -61
- package/dist/controllers/BrandingControllerSupport.d.ts +0 -20
- package/dist/controllers/BrandingControllerSupport.d.ts.map +0 -1
- package/dist/controllers/BrandingControllerSupport.js +0 -80
- package/dist/controllers/webservice/RecordSchemaController.d.ts +0 -32
- package/dist/controllers/webservice/RecordSchemaController.d.ts.map +0 -1
- package/dist/controllers/webservice/RecordSchemaController.js +0 -356
- package/dist/model/BrandingTypeface.d.ts +0 -70
- package/dist/model/BrandingTypeface.d.ts.map +0 -1
- package/dist/model/BrandingTypeface.js +0 -116
- package/dist/model/record-contract.d.ts +0 -42
- package/dist/model/record-contract.d.ts.map +0 -1
- package/dist/model/record-contract.js +0 -3
- package/dist/model/storage/record-schema.d.ts +0 -115
- package/dist/model/storage/record-schema.d.ts.map +0 -1
- package/dist/model/storage/record-schema.js +0 -3
- package/dist/record-contract/ajv-error-mapper.d.ts +0 -34
- package/dist/record-contract/ajv-error-mapper.d.ts.map +0 -1
- package/dist/record-contract/ajv-error-mapper.js +0 -153
- package/dist/record-contract/canonical-json.d.ts +0 -20
- package/dist/record-contract/canonical-json.d.ts.map +0 -1
- package/dist/record-contract/canonical-json.js +0 -126
- package/dist/record-contract/codes.d.ts +0 -36
- package/dist/record-contract/codes.d.ts.map +0 -1
- package/dist/record-contract/codes.js +0 -38
- package/dist/record-contract/contributor-registry.d.ts +0 -76
- package/dist/record-contract/contributor-registry.d.ts.map +0 -1
- package/dist/record-contract/contributor-registry.js +0 -126
- package/dist/record-contract/core-contributors.d.ts +0 -44
- package/dist/record-contract/core-contributors.d.ts.map +0 -1
- package/dist/record-contract/core-contributors.js +0 -395
- package/dist/record-contract/deep-freeze.d.ts +0 -3
- package/dist/record-contract/deep-freeze.d.ts.map +0 -1
- package/dist/record-contract/deep-freeze.js +0 -23
- package/dist/record-contract/index.d.ts +0 -13
- package/dist/record-contract/index.d.ts.map +0 -1
- package/dist/record-contract/index.js +0 -29
- package/dist/record-contract/json-pointer.d.ts +0 -20
- package/dist/record-contract/json-pointer.d.ts.map +0 -1
- package/dist/record-contract/json-pointer.js +0 -70
- package/dist/record-contract/json-schema-renderer.d.ts +0 -51
- package/dist/record-contract/json-schema-renderer.d.ts.map +0 -1
- package/dist/record-contract/json-schema-renderer.js +0 -450
- package/dist/record-contract/record-contract-compiler.d.ts +0 -42
- package/dist/record-contract/record-contract-compiler.d.ts.map +0 -1
- package/dist/record-contract/record-contract-compiler.js +0 -775
- package/dist/record-contract/record-contract-context.d.ts +0 -91
- package/dist/record-contract/record-contract-context.d.ts.map +0 -1
- package/dist/record-contract/record-contract-context.js +0 -39
- package/dist/record-contract/record-json-schema-artifact.d.ts +0 -74
- package/dist/record-contract/record-json-schema-artifact.d.ts.map +0 -1
- package/dist/record-contract/record-json-schema-artifact.js +0 -309
- package/dist/record-contract/record-json-schema-etag.d.ts +0 -15
- package/dist/record-contract/record-json-schema-etag.d.ts.map +0 -1
- package/dist/record-contract/record-json-schema-etag.js +0 -41
- package/dist/record-contract/types.d.ts +0 -151
- package/dist/record-contract/types.d.ts.map +0 -1
- package/dist/record-contract/types.js +0 -6
- package/dist/services/BrandingTypefaceService.d.ts +0 -74
- package/dist/services/BrandingTypefaceService.d.ts.map +0 -1
- package/dist/services/BrandingTypefaceService.js +0 -359
- package/dist/services/BrandingWoff2Inspector.d.ts +0 -17
- package/dist/services/BrandingWoff2Inspector.d.ts.map +0 -1
- package/dist/services/BrandingWoff2Inspector.js +0 -402
- package/dist/services/DashboardLegacyConversion.d.ts +0 -82
- package/dist/services/DashboardLegacyConversion.d.ts.map +0 -1
- package/dist/services/DashboardLegacyConversion.js +0 -427
- package/dist/services/RecordSchemaService.d.ts +0 -440
- package/dist/services/RecordSchemaService.d.ts.map +0 -1
- package/dist/services/RecordSchemaService.js +0 -3061
- package/dist/services/RecordValidationService.d.ts +0 -340
- package/dist/services/RecordValidationService.d.ts.map +0 -1
- package/dist/services/RecordValidationService.js +0 -1898
- package/dist/services/form-record-access-user.d.ts +0 -3
- package/dist/services/form-record-access-user.d.ts.map +0 -1
- package/dist/services/form-record-access-user.js +0 -23
- package/dist/services/integration-v2/bindings.d.ts +0 -3
- package/dist/services/integration-v2/bindings.d.ts.map +0 -1
- package/dist/services/integration-v2/bindings.js +0 -91
- package/dist/services/integration-v2/runtime.d.ts +0 -3
- package/dist/services/integration-v2/runtime.d.ts.map +0 -1
- package/dist/services/integration-v2/runtime.js +0 -50
- package/dist/services/internal-record-schema-authorization.d.ts +0 -8
- package/dist/services/internal-record-schema-authorization.d.ts.map +0 -1
- package/dist/services/internal-record-schema-authorization.js +0 -16
- package/dist/services/oni-v2/audit.d.ts +0 -19
- package/dist/services/oni-v2/audit.d.ts.map +0 -1
- package/dist/services/oni-v2/audit.js +0 -50
- package/dist/services/oni-v2/bindings.d.ts +0 -7
- package/dist/services/oni-v2/bindings.d.ts.map +0 -1
- package/dist/services/oni-v2/bindings.js +0 -31
- package/dist/services/oni-v2/config.d.ts +0 -12
- package/dist/services/oni-v2/config.d.ts.map +0 -1
- package/dist/services/oni-v2/config.js +0 -134
- package/dist/services/oni-v2/context.d.ts +0 -3
- package/dist/services/oni-v2/context.d.ts.map +0 -1
- package/dist/services/oni-v2/context.js +0 -17
- package/dist/services/oni-v2/crate.d.ts +0 -17
- package/dist/services/oni-v2/crate.d.ts.map +0 -1
- package/dist/services/oni-v2/crate.js +0 -504
- package/dist/services/oni-v2/flydriveOcflStore.d.ts +0 -69
- package/dist/services/oni-v2/flydriveOcflStore.d.ts.map +0 -1
- package/dist/services/oni-v2/flydriveOcflStore.js +0 -325
- package/dist/services/oni-v2/ingestion.d.ts +0 -37
- package/dist/services/oni-v2/ingestion.d.ts.map +0 -1
- package/dist/services/oni-v2/ingestion.js +0 -91
- package/dist/services/oni-v2/mapping.d.ts +0 -17
- package/dist/services/oni-v2/mapping.d.ts.map +0 -1
- package/dist/services/oni-v2/mapping.js +0 -137
- package/dist/services/oni-v2/repository.d.ts +0 -9
- package/dist/services/oni-v2/repository.d.ts.map +0 -1
- package/dist/services/oni-v2/repository.js +0 -180
- package/dist/services/oni-v2/runtime.d.ts +0 -23
- package/dist/services/oni-v2/runtime.d.ts.map +0 -1
- package/dist/services/oni-v2/runtime.js +0 -121
- package/dist/services/oni-v2/templating.d.ts +0 -11
- package/dist/services/oni-v2/templating.d.ts.map +0 -1
- package/dist/services/oni-v2/templating.js +0 -27
- package/dist/services/oni-v2/types.d.ts +0 -100
- package/dist/services/oni-v2/types.d.ts.map +0 -1
- package/dist/services/oni-v2/types.js +0 -3
- package/dist/services/raid-v2/audit.d.ts +0 -10
- package/dist/services/raid-v2/audit.d.ts.map +0 -1
- package/dist/services/raid-v2/audit.js +0 -29
- package/dist/services/raid-v2/errors.d.ts +0 -85
- package/dist/services/raid-v2/errors.d.ts.map +0 -1
- package/dist/services/raid-v2/errors.js +0 -36
- package/dist/services/raid-v2/http.d.ts +0 -4
- package/dist/services/raid-v2/http.d.ts.map +0 -1
- package/dist/services/raid-v2/http.js +0 -84
- package/dist/services/raid-v2/logger.d.ts +0 -8
- package/dist/services/raid-v2/logger.d.ts.map +0 -1
- package/dist/services/raid-v2/logger.js +0 -30
- package/dist/services/raid-v2/mapping.d.ts +0 -9
- package/dist/services/raid-v2/mapping.d.ts.map +0 -1
- package/dist/services/raid-v2/mapping.js +0 -168
- package/dist/services/raid-v2/runtime.d.ts +0 -5
- package/dist/services/raid-v2/runtime.d.ts.map +0 -1
- package/dist/services/raid-v2/runtime.js +0 -135
- package/dist/services/raid-v2/tags.d.ts +0 -11
- package/dist/services/raid-v2/tags.d.ts.map +0 -1
- package/dist/services/raid-v2/tags.js +0 -12
- package/dist/services/raid-v2/types.d.ts +0 -66
- package/dist/services/raid-v2/types.d.ts.map +0 -1
- package/dist/services/raid-v2/types.js +0 -3
- package/dist/services/record-hooks/coordinator.d.ts +0 -64
- package/dist/services/record-hooks/coordinator.d.ts.map +0 -1
- package/dist/services/record-hooks/coordinator.js +0 -276
- package/dist/visitor/related-object-data-inline.visitor.d.ts +0 -31
- package/dist/visitor/related-object-data-inline.visitor.d.ts.map +0 -1
- package/dist/visitor/related-object-data-inline.visitor.js +0 -96
- package/dist/waterline-models/DashboardConfiguration.d.ts +0 -29
- package/dist/waterline-models/DashboardConfiguration.d.ts.map +0 -1
- package/dist/waterline-models/DashboardConfiguration.js +0 -52
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import type { RecordSchemaProblemCode } from './codes';
|
|
2
|
-
/** The first stable record-contract compiler and annotation format. */
|
|
3
|
-
export declare const RECORD_CONTRACT_FORMAT_V1: "redbox-record-contract/1";
|
|
4
|
-
export type RecordContractFormat = typeof RECORD_CONTRACT_FORMAT_V1;
|
|
5
|
-
export type RecordContractCompleteness = 'complete' | 'partial';
|
|
6
|
-
export type RecordContractSchemaKind = 'create' | 'update';
|
|
7
|
-
export type RecordContractEnforcement = 'shadow' | 'enforce';
|
|
8
|
-
export type ContractJsonPrimitive = string | number | boolean | null;
|
|
9
|
-
export type ContractJsonValue = ContractJsonPrimitive | ContractJsonObject | readonly ContractJsonValue[];
|
|
10
|
-
export interface ContractJsonObject {
|
|
11
|
-
readonly [key: string]: ContractJsonValue;
|
|
12
|
-
}
|
|
13
|
-
declare const recordContractPointerBrand: unique symbol;
|
|
14
|
-
/** An RFC 6901 JSON Pointer. Construction and validation are centralized later. */
|
|
15
|
-
export type RecordContractPointer = string & {
|
|
16
|
-
readonly [recordContractPointerBrand]: 'RecordContractPointer';
|
|
17
|
-
};
|
|
18
|
-
export interface ContractNodeAnnotations {
|
|
19
|
-
readonly description?: string;
|
|
20
|
-
readonly default?: ContractJsonValue;
|
|
21
|
-
readonly examples?: readonly ContractJsonValue[];
|
|
22
|
-
readonly extensions?: Readonly<Record<string, ContractJsonValue>>;
|
|
23
|
-
}
|
|
24
|
-
interface ContractNodeBase {
|
|
25
|
-
readonly nullable: boolean;
|
|
26
|
-
readonly annotations?: ContractNodeAnnotations;
|
|
27
|
-
/** Stable reusable-definition identity retained for the later dialect renderer. */
|
|
28
|
-
readonly definitionKey?: string;
|
|
29
|
-
}
|
|
30
|
-
export type ContractScalarType = 'string' | 'number' | 'integer' | 'boolean';
|
|
31
|
-
export type ContractScalarValue = string | number | boolean;
|
|
32
|
-
export interface ContractScalarNode extends ContractNodeBase {
|
|
33
|
-
readonly kind: 'scalar';
|
|
34
|
-
readonly scalarType: ContractScalarType;
|
|
35
|
-
readonly enum?: readonly ContractScalarValue[];
|
|
36
|
-
}
|
|
37
|
-
export interface ContractObjectNode extends ContractNodeBase {
|
|
38
|
-
readonly kind: 'object';
|
|
39
|
-
readonly properties: Readonly<Record<string, ContractNode>>;
|
|
40
|
-
readonly unknownProperties: 'allow' | 'declared';
|
|
41
|
-
}
|
|
42
|
-
export interface ContractArrayNode extends ContractNodeBase {
|
|
43
|
-
readonly kind: 'array';
|
|
44
|
-
readonly items: ContractNode;
|
|
45
|
-
}
|
|
46
|
-
export interface ContractAnyNode extends ContractNodeBase {
|
|
47
|
-
readonly kind: 'any';
|
|
48
|
-
readonly reason?: 'unsupported-component' | 'unrepresentable-condition';
|
|
49
|
-
}
|
|
50
|
-
export type ContractCondition = {
|
|
51
|
-
readonly kind: 'exists';
|
|
52
|
-
readonly pointer: RecordContractPointer;
|
|
53
|
-
} | {
|
|
54
|
-
readonly kind: 'equals';
|
|
55
|
-
readonly pointer: RecordContractPointer;
|
|
56
|
-
readonly value: ContractJsonPrimitive;
|
|
57
|
-
} | {
|
|
58
|
-
readonly kind: 'in';
|
|
59
|
-
readonly pointer: RecordContractPointer;
|
|
60
|
-
readonly values: readonly ContractJsonPrimitive[];
|
|
61
|
-
} | {
|
|
62
|
-
readonly kind: 'all' | 'any';
|
|
63
|
-
readonly conditions: readonly ContractCondition[];
|
|
64
|
-
} | {
|
|
65
|
-
readonly kind: 'not';
|
|
66
|
-
readonly condition: ContractCondition;
|
|
67
|
-
};
|
|
68
|
-
export interface ContractConditionalNode extends ContractNodeBase {
|
|
69
|
-
readonly kind: 'conditional';
|
|
70
|
-
readonly condition: ContractCondition;
|
|
71
|
-
readonly thenNode: ContractNode;
|
|
72
|
-
readonly elseNode?: ContractNode;
|
|
73
|
-
}
|
|
74
|
-
export type ContractNode = ContractScalarNode | ContractObjectNode | ContractArrayNode | ContractAnyNode | ContractConditionalNode;
|
|
75
|
-
interface RecordContractPrivateContextBoundary {
|
|
76
|
-
/** Private resolver data must never become schema annotation content. */
|
|
77
|
-
readonly oid?: never;
|
|
78
|
-
readonly actor?: never;
|
|
79
|
-
readonly actorRoles?: never;
|
|
80
|
-
readonly roles?: never;
|
|
81
|
-
readonly user?: never;
|
|
82
|
-
readonly record?: never;
|
|
83
|
-
readonly existingRecord?: never;
|
|
84
|
-
readonly request?: never;
|
|
85
|
-
readonly requestId?: never;
|
|
86
|
-
readonly timestamp?: never;
|
|
87
|
-
readonly sourceForm?: never;
|
|
88
|
-
readonly sourceFormFingerprint?: never;
|
|
89
|
-
readonly reusableFormDefinitions?: never;
|
|
90
|
-
readonly formMode?: never;
|
|
91
|
-
readonly contextVariables?: never;
|
|
92
|
-
}
|
|
93
|
-
/** Stable, non-sensitive context that is safe to include in a schema document. */
|
|
94
|
-
export interface RecordContractPublicContext extends RecordContractPrivateContextBoundary {
|
|
95
|
-
readonly brand: string;
|
|
96
|
-
readonly portal: string;
|
|
97
|
-
readonly kind: RecordContractSchemaKind;
|
|
98
|
-
readonly recordType: string;
|
|
99
|
-
readonly workflowStep: string;
|
|
100
|
-
readonly form: string;
|
|
101
|
-
readonly operation: string;
|
|
102
|
-
readonly unknownProperties: 'allow' | 'declared';
|
|
103
|
-
readonly enforcement: RecordContractEnforcement;
|
|
104
|
-
}
|
|
105
|
-
export type RecordContractDiagnosticSeverity = 'info' | 'warning' | 'error';
|
|
106
|
-
export interface RecordContractContributorIdentity {
|
|
107
|
-
readonly key: string;
|
|
108
|
-
readonly version: string;
|
|
109
|
-
readonly source: 'core' | 'hook';
|
|
110
|
-
}
|
|
111
|
-
export interface RecordContractDiagnostic {
|
|
112
|
-
readonly code: string;
|
|
113
|
-
readonly severity: RecordContractDiagnosticSeverity;
|
|
114
|
-
readonly message: string;
|
|
115
|
-
readonly pointer?: RecordContractPointer;
|
|
116
|
-
readonly componentType?: string;
|
|
117
|
-
readonly contributor?: RecordContractContributorIdentity;
|
|
118
|
-
}
|
|
119
|
-
export interface RecordContractValidationSummary {
|
|
120
|
-
readonly code: string;
|
|
121
|
-
readonly pointers: readonly RecordContractPointer[];
|
|
122
|
-
readonly groups: readonly string[];
|
|
123
|
-
readonly operations: readonly string[];
|
|
124
|
-
readonly blocking: boolean;
|
|
125
|
-
}
|
|
126
|
-
export interface ContractOwner {
|
|
127
|
-
readonly kind: 'form' | 'component';
|
|
128
|
-
readonly key: string;
|
|
129
|
-
readonly contributor?: RecordContractContributorIdentity;
|
|
130
|
-
}
|
|
131
|
-
export interface RecordContract {
|
|
132
|
-
readonly root: ContractObjectNode;
|
|
133
|
-
readonly definitions: Readonly<Record<string, ContractNode>>;
|
|
134
|
-
readonly fieldOwners: Readonly<Record<string, ContractOwner>>;
|
|
135
|
-
readonly validatorSummaries: readonly RecordContractValidationSummary[];
|
|
136
|
-
readonly diagnostics: readonly RecordContractDiagnostic[];
|
|
137
|
-
readonly completeness: RecordContractCompleteness;
|
|
138
|
-
readonly context: RecordContractPublicContext;
|
|
139
|
-
}
|
|
140
|
-
export type RecordContractCompileFailureKind = 'invalid-contract' | 'limit-exceeded' | 'contributor-failed';
|
|
141
|
-
export type RecordContractCompileResult = {
|
|
142
|
-
readonly kind: 'compiled';
|
|
143
|
-
readonly contract: RecordContract;
|
|
144
|
-
} | {
|
|
145
|
-
readonly kind: 'failed';
|
|
146
|
-
readonly failureKind: RecordContractCompileFailureKind;
|
|
147
|
-
readonly code: RecordSchemaProblemCode;
|
|
148
|
-
readonly diagnostics: readonly RecordContractDiagnostic[];
|
|
149
|
-
};
|
|
150
|
-
export {};
|
|
151
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/record-contract/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RECORD_CONTRACT_FORMAT_V1 = void 0;
|
|
4
|
-
/** The first stable record-contract compiler and annotation format. */
|
|
5
|
-
exports.RECORD_CONTRACT_FORMAT_V1 = 'redbox-record-contract/1';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVjb3JkLWNvbnRyYWN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHVFQUF1RTtBQUMxRCxRQUFBLHlCQUF5QixHQUFHLDBCQUFtQyxDQUFDIn0=
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { Services as services } from '../CoreService';
|
|
2
|
-
import { type BrandingTypefaceFace, type BrandingTypefaceSlot, type BrandingTypefaceState } from '../model/BrandingTypeface';
|
|
3
|
-
export type BrandingTypefaceErrorCode = 'typeface-invalid-slot' | 'typeface-empty' | 'typeface-invalid-font' | 'typeface-variable-font' | 'typeface-face-too-large' | 'typeface-family-too-large' | 'typeface-not-found' | 'typeface-corrupt' | 'typeface-storage-failed';
|
|
4
|
-
export declare class BrandingTypefaceError extends Error {
|
|
5
|
-
readonly code: BrandingTypefaceErrorCode;
|
|
6
|
-
constructor(code: BrandingTypefaceErrorCode, message: string);
|
|
7
|
-
}
|
|
8
|
-
export interface BrandingTypefaceSlotDescriptor {
|
|
9
|
-
weight: number;
|
|
10
|
-
style: string;
|
|
11
|
-
}
|
|
12
|
-
export interface InspectAndStoreFaceInput {
|
|
13
|
-
brandingId: string;
|
|
14
|
-
slot: string;
|
|
15
|
-
bytes: Buffer;
|
|
16
|
-
originalFilename?: string;
|
|
17
|
-
/** Current draft faces (for distinct-content family limit enforcement). */
|
|
18
|
-
existingFaces?: BrandingTypefaceFace[];
|
|
19
|
-
}
|
|
20
|
-
export interface BrandingTypefaceReconciliationResult {
|
|
21
|
-
scanned: number;
|
|
22
|
-
referenced: number;
|
|
23
|
-
deleted: number;
|
|
24
|
-
skippedGrace: number;
|
|
25
|
-
skippedUnexpected: number;
|
|
26
|
-
failures: number;
|
|
27
|
-
}
|
|
28
|
-
export declare namespace Services {
|
|
29
|
-
class BrandingTypeface extends services.Core.Service {
|
|
30
|
-
/** Fixed CSS descriptor for an explicit slot. */
|
|
31
|
-
slotDescriptor(slot: BrandingTypefaceSlot): BrandingTypefaceSlotDescriptor;
|
|
32
|
-
/** Canonical immutable storage key for one brand's face bytes. */
|
|
33
|
-
storageKey(brandingId: string, sha256: string): string;
|
|
34
|
-
/** Portal-independent public URL so all portals under a brand share the browser cache. */
|
|
35
|
-
publicUrl(brandName: string, sha256: string): string;
|
|
36
|
-
/** Strict parse of a storage key; returns null for unexpected entries (logged + skipped). */
|
|
37
|
-
parseStorageKey(key: string): {
|
|
38
|
-
brandingId: string;
|
|
39
|
-
sha256: string;
|
|
40
|
-
} | null;
|
|
41
|
-
private mismatchWarnings;
|
|
42
|
-
private enforceFamilyLimit;
|
|
43
|
-
/**
|
|
44
|
-
* Validate, hash, store (or reuse), and describe one uploaded face.
|
|
45
|
-
* Transport size limits are re-enforced here so Skipper is never the only boundary.
|
|
46
|
-
*/
|
|
47
|
-
inspectAndStoreFace(input: InspectAndStoreFaceInput): Promise<BrandingTypefaceFace>;
|
|
48
|
-
/** Lightweight existence probe for advisory health checks (no byte reads, no hashing). */
|
|
49
|
-
faceExists(brandingId: string, sha256: string): Promise<boolean>;
|
|
50
|
-
/** Read and hash-verify one stored face. Never substitutes another font. */
|
|
51
|
-
readFace(brandingId: string, sha256: string): Promise<Buffer>;
|
|
52
|
-
/** Verify every face referenced by a candidate snapshot before publish/restore. */
|
|
53
|
-
assertTypefaceAvailable(brandingId: string, typeface: BrandingTypefaceState | null | undefined): Promise<void>;
|
|
54
|
-
/** Collect every storage key referenced by any brand's active/draft typeface or retained history. */
|
|
55
|
-
collectReferencedKeys(): Promise<Map<string, {
|
|
56
|
-
brandingId: string;
|
|
57
|
-
sha256: string;
|
|
58
|
-
}>>;
|
|
59
|
-
/** Fresh per-key reference check used immediately before each deletion (scan/delete race). */
|
|
60
|
-
isKeyReferenced(brandingId: string, sha256: string): Promise<boolean>;
|
|
61
|
-
/**
|
|
62
|
-
* Delete only objects that remain unreferenced and outside the grace period.
|
|
63
|
-
* Individual failures are logged and retried on the next run; they never abort the scan.
|
|
64
|
-
*/
|
|
65
|
-
reconcileAssets(options?: {
|
|
66
|
-
now?: number;
|
|
67
|
-
graceMs?: number;
|
|
68
|
-
}): Promise<BrandingTypefaceReconciliationResult>;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
declare global {
|
|
72
|
-
let BrandingTypefaceService: Services.BrandingTypeface;
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=BrandingTypefaceService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BrandingTypefaceService.d.ts","sourceRoot":"","sources":["../../src/services/BrandingTypefaceService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.Services = exports.BrandingTypefaceError = void 0;
|
|
13
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
14
|
-
const PopulateExportedMethods_decorator_1 = require("../decorator/PopulateExportedMethods.decorator");
|
|
15
|
-
const CoreService_1 = require("../CoreService");
|
|
16
|
-
const branding_config_1 = require("../config/branding.config");
|
|
17
|
-
const BrandingTypeface_1 = require("../model/BrandingTypeface");
|
|
18
|
-
const BrandingWoff2Inspector_1 = require("./BrandingWoff2Inspector");
|
|
19
|
-
class BrandingTypefaceError extends Error {
|
|
20
|
-
code;
|
|
21
|
-
constructor(code, message) {
|
|
22
|
-
super(message);
|
|
23
|
-
this.name = 'BrandingTypefaceError';
|
|
24
|
-
this.code = code;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.BrandingTypefaceError = BrandingTypefaceError;
|
|
28
|
-
const FONT_PREFIX = 'branding-fonts/';
|
|
29
|
-
const FONT_CONTENT_TYPE = 'font/woff2';
|
|
30
|
-
const SHA256_RE = /^[0-9a-f]{64}$/;
|
|
31
|
-
const STORAGE_KEY_RE = /^branding-fonts\/([^/]+)\/([0-9a-f]{64})\.woff2$/;
|
|
32
|
-
const SLOT_DESCRIPTORS = {
|
|
33
|
-
regular: { weight: 400, style: 'normal' },
|
|
34
|
-
bold: { weight: 700, style: 'normal' },
|
|
35
|
-
italic: { weight: 400, style: 'italic' },
|
|
36
|
-
boldItalic: { weight: 700, style: 'italic' },
|
|
37
|
-
};
|
|
38
|
-
function readPositiveInt(key, fallback) {
|
|
39
|
-
return (0, branding_config_1.getBrandingPositiveInt)(key, fallback);
|
|
40
|
-
}
|
|
41
|
-
function sha256Hex(bytes) {
|
|
42
|
-
return crypto_1.default.createHash('sha256').update(bytes).digest('hex');
|
|
43
|
-
}
|
|
44
|
-
function isStorageNotFoundError(error) {
|
|
45
|
-
if (!error || typeof error !== 'object') {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
const record = error;
|
|
49
|
-
const message = typeof record.message === 'string' ? record.message.toLowerCase() : '';
|
|
50
|
-
return (record.code === 'ENOENT' ||
|
|
51
|
-
record.status === 404 ||
|
|
52
|
-
record.statusCode === 404 ||
|
|
53
|
-
message.includes('not found') ||
|
|
54
|
-
message.includes('enoent') ||
|
|
55
|
-
message.includes('nosuchkey'));
|
|
56
|
-
}
|
|
57
|
-
var Services;
|
|
58
|
-
(function (Services) {
|
|
59
|
-
let BrandingTypeface = class BrandingTypeface extends CoreService_1.Services.Core.Service {
|
|
60
|
-
/** Fixed CSS descriptor for an explicit slot. */
|
|
61
|
-
slotDescriptor(slot) {
|
|
62
|
-
return { ...SLOT_DESCRIPTORS[slot] };
|
|
63
|
-
}
|
|
64
|
-
/** Canonical immutable storage key for one brand's face bytes. */
|
|
65
|
-
storageKey(brandingId, sha256) {
|
|
66
|
-
return `${FONT_PREFIX}${brandingId}/${sha256}.woff2`;
|
|
67
|
-
}
|
|
68
|
-
/** Portal-independent public URL so all portals under a brand share the browser cache. */
|
|
69
|
-
publicUrl(brandName, sha256) {
|
|
70
|
-
const rootContext = sails?.config?.http?.rootContext;
|
|
71
|
-
const root = rootContext ? `/${rootContext}` : '';
|
|
72
|
-
return `${root}/fonts/branding/${encodeURIComponent(brandName)}/${sha256}.woff2`;
|
|
73
|
-
}
|
|
74
|
-
/** Strict parse of a storage key; returns null for unexpected entries (logged + skipped). */
|
|
75
|
-
parseStorageKey(key) {
|
|
76
|
-
const match = STORAGE_KEY_RE.exec(key);
|
|
77
|
-
if (!match) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
return { brandingId: match[1], sha256: match[2] };
|
|
81
|
-
}
|
|
82
|
-
mismatchWarnings(slot, inspection) {
|
|
83
|
-
const warnings = [];
|
|
84
|
-
const descriptor = SLOT_DESCRIPTORS[slot];
|
|
85
|
-
const subfamily = inspection.subfamily?.toLowerCase();
|
|
86
|
-
const weight = inspection.embeddedWeight ?? (subfamily ? (/bold/.test(subfamily) ? 700 : 400) : undefined);
|
|
87
|
-
const style = inspection.embeddedStyle ?? (subfamily ? (/italic|oblique/.test(subfamily) ? 'italic' : 'normal') : undefined);
|
|
88
|
-
if ((weight !== undefined && weight !== descriptor.weight) ||
|
|
89
|
-
(style !== undefined && style !== descriptor.style)) {
|
|
90
|
-
warnings.push(`embedded descriptors differ from slot "${slot}"; slot remains authoritative`);
|
|
91
|
-
}
|
|
92
|
-
return warnings;
|
|
93
|
-
}
|
|
94
|
-
enforceFamilyLimit(slot, bytes, sha256, existingFaces) {
|
|
95
|
-
const familyMax = readPositiveInt('typefaceFamilyMaxBytes', BrandingTypeface_1.BRANDING_TYPEFACE_FAMILY_MAX_BYTES);
|
|
96
|
-
const sizeByHash = new Map();
|
|
97
|
-
for (const face of existingFaces) {
|
|
98
|
-
if (face.slot !== slot && !sizeByHash.has(face.sha256)) {
|
|
99
|
-
sizeByHash.set(face.sha256, face.sizeBytes);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (!sizeByHash.has(sha256)) {
|
|
103
|
-
sizeByHash.set(sha256, bytes.length);
|
|
104
|
-
}
|
|
105
|
-
let total = 0;
|
|
106
|
-
for (const size of sizeByHash.values()) {
|
|
107
|
-
total += size;
|
|
108
|
-
}
|
|
109
|
-
if (total > familyMax) {
|
|
110
|
-
throw new BrandingTypefaceError('typeface-family-too-large', `Typeface family size ${total} exceeds the configured maximum ${familyMax}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Validate, hash, store (or reuse), and describe one uploaded face.
|
|
115
|
-
* Transport size limits are re-enforced here so Skipper is never the only boundary.
|
|
116
|
-
*/
|
|
117
|
-
async inspectAndStoreFace(input) {
|
|
118
|
-
if (!(0, BrandingTypeface_1.isBrandingTypefaceSlot)(input.slot)) {
|
|
119
|
-
throw new BrandingTypefaceError('typeface-invalid-slot', `Invalid typeface slot: ${String(input.slot)}`);
|
|
120
|
-
}
|
|
121
|
-
const slot = input.slot;
|
|
122
|
-
const bytes = input.bytes;
|
|
123
|
-
if (!bytes || !Buffer.isBuffer(bytes) || bytes.length === 0) {
|
|
124
|
-
throw new BrandingTypefaceError('typeface-empty', 'Empty font upload');
|
|
125
|
-
}
|
|
126
|
-
const faceMax = readPositiveInt('typefaceFaceMaxBytes', BrandingTypeface_1.BRANDING_TYPEFACE_FACE_MAX_BYTES);
|
|
127
|
-
if (bytes.length > faceMax) {
|
|
128
|
-
throw new BrandingTypefaceError('typeface-face-too-large', `Typeface face size ${bytes.length} exceeds the configured maximum ${faceMax}`);
|
|
129
|
-
}
|
|
130
|
-
let inspection;
|
|
131
|
-
try {
|
|
132
|
-
const result = await (0, BrandingWoff2Inspector_1.inspectWoff2Buffer)(bytes);
|
|
133
|
-
if (result.isVariable) {
|
|
134
|
-
throw new BrandingTypefaceError('typeface-variable-font', 'Variable fonts are not supported');
|
|
135
|
-
}
|
|
136
|
-
inspection = result.inspection;
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
if (error instanceof BrandingTypefaceError) {
|
|
140
|
-
throw error;
|
|
141
|
-
}
|
|
142
|
-
const reason = error instanceof BrandingWoff2Inspector_1.Woff2InspectError ? error.message : 'unparseable font data';
|
|
143
|
-
throw new BrandingTypefaceError('typeface-invalid-font', `Invalid WOFF2 font: ${reason}`);
|
|
144
|
-
}
|
|
145
|
-
const sha256 = sha256Hex(bytes);
|
|
146
|
-
this.enforceFamilyLimit(slot, bytes, sha256, input.existingFaces ?? []);
|
|
147
|
-
const key = this.storageKey(input.brandingId, sha256);
|
|
148
|
-
const disk = StorageManagerService.primaryDisk();
|
|
149
|
-
try {
|
|
150
|
-
if (await disk.exists(key)) {
|
|
151
|
-
const stored = Buffer.from(await disk.getBytes(key));
|
|
152
|
-
if (sha256Hex(stored) !== sha256) {
|
|
153
|
-
sails.log.error(`BrandingTypefaceService hash mismatch for brand ${input.brandingId} face ${sha256}`);
|
|
154
|
-
throw new BrandingTypefaceError('typeface-corrupt', 'Stored font bytes failed integrity verification');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
await disk.put(key, bytes, { contentType: FONT_CONTENT_TYPE });
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
catch (error) {
|
|
162
|
-
if (error instanceof BrandingTypefaceError) {
|
|
163
|
-
throw error;
|
|
164
|
-
}
|
|
165
|
-
throw new BrandingTypefaceError('typeface-storage-failed', 'Font storage failed; the typeface draft was not changed');
|
|
166
|
-
}
|
|
167
|
-
return {
|
|
168
|
-
slot,
|
|
169
|
-
sha256,
|
|
170
|
-
originalFilename: String(input.originalFilename ?? 'face.woff2').slice(0, 256),
|
|
171
|
-
sizeBytes: bytes.length,
|
|
172
|
-
uploadedAt: new Date().toISOString(),
|
|
173
|
-
inspection,
|
|
174
|
-
warnings: this.mismatchWarnings(slot, inspection),
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
/** Lightweight existence probe for advisory health checks (no byte reads, no hashing). */
|
|
178
|
-
async faceExists(brandingId, sha256) {
|
|
179
|
-
if (!SHA256_RE.test(sha256)) {
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
try {
|
|
183
|
-
return await StorageManagerService.primaryDisk().exists(this.storageKey(brandingId, sha256));
|
|
184
|
-
}
|
|
185
|
-
catch {
|
|
186
|
-
return false;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
/** Read and hash-verify one stored face. Never substitutes another font. */
|
|
190
|
-
async readFace(brandingId, sha256) {
|
|
191
|
-
if (!SHA256_RE.test(sha256)) {
|
|
192
|
-
throw new BrandingTypefaceError('typeface-not-found', 'Font not found');
|
|
193
|
-
}
|
|
194
|
-
const key = this.storageKey(brandingId, sha256);
|
|
195
|
-
let stored;
|
|
196
|
-
try {
|
|
197
|
-
stored = Buffer.from(await StorageManagerService.primaryDisk().getBytes(key));
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
if (!isStorageNotFoundError(error)) {
|
|
201
|
-
sails.log.warn(`BrandingTypefaceService storage read failed for brand ${brandingId}:`, error);
|
|
202
|
-
}
|
|
203
|
-
throw new BrandingTypefaceError('typeface-not-found', 'Font not found');
|
|
204
|
-
}
|
|
205
|
-
if (sha256Hex(stored) !== sha256) {
|
|
206
|
-
sails.log.error(`BrandingTypefaceService hash mismatch for brand ${brandingId} face ${sha256}`);
|
|
207
|
-
throw new BrandingTypefaceError('typeface-corrupt', 'Stored font bytes failed integrity verification');
|
|
208
|
-
}
|
|
209
|
-
return stored;
|
|
210
|
-
}
|
|
211
|
-
/** Verify every face referenced by a candidate snapshot before publish/restore. */
|
|
212
|
-
async assertTypefaceAvailable(brandingId, typeface) {
|
|
213
|
-
const state = (0, BrandingTypeface_1.normalizeTypefaceState)(typeface);
|
|
214
|
-
for (const face of (0, BrandingTypeface_1.orderedTypefaceFaces)(state)) {
|
|
215
|
-
await this.readFace(brandingId, face.sha256);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
/** Collect every storage key referenced by any brand's active/draft typeface or retained history. */
|
|
219
|
-
async collectReferencedKeys() {
|
|
220
|
-
const referenced = new Map();
|
|
221
|
-
const addState = (brandingId, typeface) => {
|
|
222
|
-
for (const face of (0, BrandingTypeface_1.orderedTypefaceFaces)((0, BrandingTypeface_1.normalizeTypefaceState)(typeface))) {
|
|
223
|
-
const key = this.storageKey(brandingId, face.sha256);
|
|
224
|
-
referenced.set(key, { brandingId, sha256: face.sha256 });
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
const brands = (await BrandingConfig.find({}));
|
|
228
|
-
for (const brand of brands) {
|
|
229
|
-
const brandingId = String(brand.id);
|
|
230
|
-
addState(brandingId, brand.typeface);
|
|
231
|
-
addState(brandingId, brand.draftTypeface);
|
|
232
|
-
}
|
|
233
|
-
const histories = (await BrandingConfigHistory.find({}));
|
|
234
|
-
for (const history of histories) {
|
|
235
|
-
const branding = history.branding;
|
|
236
|
-
const brandingId = String(typeof branding === 'object' && branding !== null ? (branding.id ?? '') : branding);
|
|
237
|
-
if (brandingId) {
|
|
238
|
-
addState(brandingId, history.typeface);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
return referenced;
|
|
242
|
-
}
|
|
243
|
-
/** Fresh per-key reference check used immediately before each deletion (scan/delete race). */
|
|
244
|
-
async isKeyReferenced(brandingId, sha256) {
|
|
245
|
-
const brand = await BrandingConfig.findOne({ id: brandingId });
|
|
246
|
-
if (brand) {
|
|
247
|
-
for (const source of [brand.typeface, brand.draftTypeface]) {
|
|
248
|
-
if ((0, BrandingTypeface_1.orderedTypefaceFaces)((0, BrandingTypeface_1.normalizeTypefaceState)(source)).some(face => face.sha256 === sha256)) {
|
|
249
|
-
return true;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
const histories = (await BrandingConfigHistory.find({
|
|
254
|
-
branding: brandingId,
|
|
255
|
-
}));
|
|
256
|
-
for (const history of histories) {
|
|
257
|
-
if ((0, BrandingTypeface_1.orderedTypefaceFaces)((0, BrandingTypeface_1.normalizeTypefaceState)(history.typeface)).some(face => face.sha256 === sha256)) {
|
|
258
|
-
return true;
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return false;
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Delete only objects that remain unreferenced and outside the grace period.
|
|
265
|
-
* Individual failures are logged and retried on the next run; they never abort the scan.
|
|
266
|
-
*/
|
|
267
|
-
async reconcileAssets(options) {
|
|
268
|
-
const now = options?.now ?? Date.now();
|
|
269
|
-
const graceMs = options?.graceMs ?? readPositiveInt('typefaceOrphanGraceMs', BrandingTypeface_1.BRANDING_TYPEFACE_ORPHAN_GRACE_MS);
|
|
270
|
-
const referenced = await this.collectReferencedKeys();
|
|
271
|
-
const disk = StorageManagerService.primaryDisk();
|
|
272
|
-
const result = {
|
|
273
|
-
scanned: 0,
|
|
274
|
-
referenced: referenced.size,
|
|
275
|
-
deleted: 0,
|
|
276
|
-
skippedGrace: 0,
|
|
277
|
-
skippedUnexpected: 0,
|
|
278
|
-
failures: 0,
|
|
279
|
-
};
|
|
280
|
-
let paginationToken;
|
|
281
|
-
// Collect keys first, then mutate: offset-based listings shift when an
|
|
282
|
-
// earlier page entry is deleted mid-scan, which would skip entries.
|
|
283
|
-
const keys = [];
|
|
284
|
-
for (;;) {
|
|
285
|
-
const listing = await disk.listAll(FONT_PREFIX, {
|
|
286
|
-
recursive: true,
|
|
287
|
-
...(paginationToken ? { paginationToken } : {}),
|
|
288
|
-
});
|
|
289
|
-
for (const entry of listing.objects) {
|
|
290
|
-
const record = entry;
|
|
291
|
-
keys.push(typeof record === 'string' ? record : String(record.key ?? record.name ?? ''));
|
|
292
|
-
}
|
|
293
|
-
paginationToken = listing.paginationToken;
|
|
294
|
-
if (!paginationToken) {
|
|
295
|
-
break;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
for (const key of keys) {
|
|
299
|
-
result.scanned += 1;
|
|
300
|
-
const parsed = this.parseStorageKey(key);
|
|
301
|
-
if (!parsed) {
|
|
302
|
-
result.skippedUnexpected += 1;
|
|
303
|
-
sails.log.warn(`BrandingTypefaceService reconciliation skipping unexpected key under ${FONT_PREFIX}`);
|
|
304
|
-
continue;
|
|
305
|
-
}
|
|
306
|
-
if (referenced.has(key)) {
|
|
307
|
-
continue;
|
|
308
|
-
}
|
|
309
|
-
let lastModified;
|
|
310
|
-
try {
|
|
311
|
-
const meta = await disk.getMetaData(key);
|
|
312
|
-
lastModified = meta.lastModified;
|
|
313
|
-
}
|
|
314
|
-
catch (error) {
|
|
315
|
-
if (isStorageNotFoundError(error)) {
|
|
316
|
-
continue;
|
|
317
|
-
}
|
|
318
|
-
result.failures += 1;
|
|
319
|
-
sails.log.warn(`BrandingTypefaceService reconciliation metadata failed for brand ${parsed.brandingId}:`, error);
|
|
320
|
-
continue;
|
|
321
|
-
}
|
|
322
|
-
if (now - lastModified.getTime() < graceMs) {
|
|
323
|
-
result.skippedGrace += 1;
|
|
324
|
-
continue;
|
|
325
|
-
}
|
|
326
|
-
// Close the scan/delete race with a fresh reference read.
|
|
327
|
-
try {
|
|
328
|
-
if (await this.isKeyReferenced(parsed.brandingId, parsed.sha256)) {
|
|
329
|
-
continue;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
catch (error) {
|
|
333
|
-
result.failures += 1;
|
|
334
|
-
sails.log.warn(`BrandingTypefaceService reconciliation recheck failed for brand ${parsed.brandingId}:`, error);
|
|
335
|
-
continue;
|
|
336
|
-
}
|
|
337
|
-
try {
|
|
338
|
-
await disk.delete(key);
|
|
339
|
-
result.deleted += 1;
|
|
340
|
-
}
|
|
341
|
-
catch (error) {
|
|
342
|
-
if (isStorageNotFoundError(error)) {
|
|
343
|
-
continue;
|
|
344
|
-
}
|
|
345
|
-
result.failures += 1;
|
|
346
|
-
sails.log.warn(`BrandingTypefaceService reconciliation delete failed for brand ${parsed.brandingId}:`, error);
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
sails.log.info(`BrandingTypefaceService reconciliation: scanned=${result.scanned} referenced=${result.referenced} ` +
|
|
350
|
-
`deleted=${result.deleted} skippedGrace=${result.skippedGrace} skippedUnexpected=${result.skippedUnexpected} failures=${result.failures}.`);
|
|
351
|
-
return result;
|
|
352
|
-
}
|
|
353
|
-
};
|
|
354
|
-
BrandingTypeface = __decorate([
|
|
355
|
-
PopulateExportedMethods_decorator_1.PopulateExportedMethods
|
|
356
|
-
], BrandingTypeface);
|
|
357
|
-
Services.BrandingTypeface = BrandingTypeface;
|
|
358
|
-
})(Services || (exports.Services = Services = {}));
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJhbmRpbmdUeXBlZmFjZVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvQnJhbmRpbmdUeXBlZmFjZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNHQUF5RjtBQUN6RixnREFBc0Q7QUFDdEQsK0RBQW1FO0FBQ25FLGdFQVdtQztBQUNuQyxxRUFBaUY7QUFlakYsTUFBYSxxQkFBc0IsU0FBUSxLQUFLO0lBQ3JDLElBQUksQ0FBNEI7SUFDekMsWUFBWSxJQUErQixFQUFFLE9BQWU7UUFDMUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUFQRCxzREFPQztBQXlCRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQUN0QyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztBQUN2QyxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuQyxNQUFNLGNBQWMsR0FBRyxrREFBa0QsQ0FBQztBQUUxRSxNQUFNLGdCQUFnQixHQUFpRTtJQUNyRixPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7SUFDekMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0lBQ3RDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtJQUN4QyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Q0FDN0MsQ0FBQztBQUVGLFNBQVMsZUFBZSxDQUN0QixHQUFnRixFQUNoRixRQUFnQjtJQUVoQixPQUFP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
|