@researchdatabox/redbox-core 5.0.2 → 5.0.4-beta.12498
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/AttachmentStagingIdentity.d.ts +3 -0
- package/dist/AttachmentStagingIdentity.d.ts.map +1 -0
- package/dist/AttachmentStagingIdentity.js +10 -0
- package/dist/CoreController.d.ts +7 -3
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +85 -3
- package/dist/DatastreamService.d.ts +4 -0
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/HarvestRunService.d.ts +4 -3
- package/dist/HarvestRunService.d.ts.map +1 -1
- package/dist/HarvestRunService.js +1 -1
- package/dist/RecordConcurrencyObservability.d.ts +51 -0
- package/dist/RecordConcurrencyObservability.d.ts.map +1 -0
- package/dist/RecordConcurrencyObservability.js +136 -0
- package/dist/RecordEntityTag.d.ts +31 -0
- package/dist/RecordEntityTag.d.ts.map +1 -0
- package/dist/RecordEntityTag.js +101 -0
- package/dist/RecordFormFingerprint.d.ts +7 -0
- package/dist/RecordFormFingerprint.d.ts.map +1 -0
- package/dist/RecordFormFingerprint.js +106 -0
- package/dist/RecordHttpConcurrency.d.ts +60 -0
- package/dist/RecordHttpConcurrency.d.ts.map +1 -0
- package/dist/RecordHttpConcurrency.js +181 -0
- package/dist/RecordSaveResponse.d.ts +219 -0
- package/dist/RecordSaveResponse.d.ts.map +1 -0
- package/dist/RecordSaveResponse.js +639 -0
- package/dist/RecordStorageConcurrency.d.ts +48 -0
- package/dist/RecordStorageConcurrency.d.ts.map +1 -0
- package/dist/RecordStorageConcurrency.js +103 -0
- package/dist/RecordWriteClassification.d.ts +12 -0
- package/dist/RecordWriteClassification.d.ts.map +1 -0
- package/dist/RecordWriteClassification.js +70 -0
- package/dist/RecordsService.d.ts +105 -12
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/RecordsService.js +44 -1
- package/dist/SearchService.d.ts +2 -1
- package/dist/SearchService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +48 -8
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/StorageService.js +19 -1
- package/dist/StorageServiceResponse.d.ts +22 -1
- package/dist/StorageServiceResponse.d.ts.map +1 -1
- package/dist/StorageServiceResponse.js +22 -4
- package/dist/action-execution/audit.d.ts +41 -0
- package/dist/action-execution/audit.d.ts.map +1 -0
- package/dist/action-execution/audit.js +122 -0
- package/dist/action-execution/executor.d.ts +24 -0
- package/dist/action-execution/executor.d.ts.map +1 -0
- package/dist/action-execution/executor.js +435 -0
- package/dist/action-execution/failure.d.ts +49 -0
- package/dist/action-execution/failure.d.ts.map +1 -0
- package/dist/action-execution/failure.js +129 -0
- package/dist/action-execution/index.d.ts +7 -0
- package/dist/action-execution/index.d.ts.map +1 -0
- package/dist/action-execution/index.js +23 -0
- package/dist/action-execution/legacy-result.d.ts +21 -0
- package/dist/action-execution/legacy-result.d.ts.map +1 -0
- package/dist/action-execution/legacy-result.js +70 -0
- package/dist/action-execution/policy.d.ts +12 -0
- package/dist/action-execution/policy.d.ts.map +1 -0
- package/dist/action-execution/policy.js +138 -0
- package/dist/action-execution/types.d.ts +121 -0
- package/dist/action-execution/types.d.ts.map +1 -0
- package/dist/action-execution/types.js +22 -0
- package/dist/api-routes/groups/branding.d.ts +8 -0
- package/dist/api-routes/groups/branding.d.ts.map +1 -1
- package/dist/api-routes/groups/branding.js +86 -11
- package/dist/api-routes/groups/dashboard-config.d.ts +12 -9
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -1
- package/dist/api-routes/groups/dashboard-config.js +136 -73
- package/dist/api-routes/groups/forms.d.ts.map +1 -1
- package/dist/api-routes/groups/forms.js +10 -2
- package/dist/api-routes/groups/record-schemas.d.ts +5 -0
- package/dist/api-routes/groups/record-schemas.d.ts.map +1 -0
- package/dist/api-routes/groups/record-schemas.js +181 -0
- package/dist/api-routes/groups/records.d.ts +1 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -1
- package/dist/api-routes/groups/records.js +141 -26
- package/dist/api-routes/index.d.ts +3 -0
- package/dist/api-routes/index.d.ts.map +1 -1
- package/dist/api-routes/index.js +4 -1
- package/dist/api-routes/openapi.d.ts.map +1 -1
- package/dist/api-routes/openapi.js +7 -5
- package/dist/api-routes/record-schema-openapi.d.ts +26 -0
- package/dist/api-routes/record-schema-openapi.d.ts.map +1 -0
- package/dist/api-routes/record-schema-openapi.js +38 -0
- package/dist/api-routes/record-schema-response.d.ts +40 -0
- package/dist/api-routes/record-schema-response.d.ts.map +1 -0
- package/dist/api-routes/record-schema-response.js +89 -0
- package/dist/api-routes/request-extraction.d.ts.map +1 -1
- package/dist/api-routes/request-extraction.js +10 -8
- package/dist/api-routes/route-factory.d.ts.map +1 -1
- package/dist/api-routes/route-factory.js +2 -1
- package/dist/api-routes/route-registry.d.ts.map +1 -1
- package/dist/api-routes/route-registry.js +3 -1
- package/dist/api-routes/schemas/common.d.ts +36 -0
- package/dist/api-routes/schemas/common.d.ts.map +1 -1
- package/dist/api-routes/schemas/common.js +95 -5
- package/dist/api-routes/schemas/responses.d.ts +1424 -1
- package/dist/api-routes/schemas/responses.d.ts.map +1 -1
- package/dist/api-routes/schemas/responses.js +382 -60
- package/dist/api-routes/types.d.ts +1 -0
- package/dist/api-routes/types.d.ts.map +1 -1
- package/dist/api-routes/validation.d.ts +5 -1
- package/dist/api-routes/validation.d.ts.map +1 -1
- package/dist/api-routes/validation.js +14 -15
- package/dist/bootstrap.d.ts +3 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +58 -41
- package/dist/config/agendaQueue.config.d.ts +3 -0
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +29 -2
- package/dist/config/branding.config.d.ts +13 -0
- package/dist/config/branding.config.d.ts.map +1 -1
- package/dist/config/branding.config.js +34 -2
- package/dist/config/brandingConfigurationDefaults.config.d.ts +4 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +42 -3
- package/dist/config/index.d.ts +12 -4
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +7 -4
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +37 -23
- package/dist/config/raid.config.d.ts +7 -4
- package/dist/config/raid.config.d.ts.map +1 -1
- package/dist/config/raid.config.js +21 -35
- package/dist/config/record.config.d.ts +3 -0
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +37 -35
- package/dist/config/recordSchema.config.d.ts +68 -0
- package/dist/config/recordSchema.config.d.ts.map +1 -0
- package/dist/config/recordSchema.config.js +173 -0
- package/dist/config/recordValidation.config.d.ts +19 -0
- package/dist/config/recordValidation.config.d.ts.map +1 -0
- package/dist/config/recordValidation.config.js +10 -0
- package/dist/config/recordtype.config.d.ts +32 -9
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +4 -7
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +135 -53
- package/dist/config/workflow.config.d.ts +6 -0
- 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 +4 -2
- package/dist/configmodels/ConfigModels.d.ts +1 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +26 -9
- package/dist/configmodels/DashboardFieldCatalogue.d.ts +67 -0
- package/dist/configmodels/DashboardFieldCatalogue.d.ts.map +1 -0
- package/dist/configmodels/DashboardFieldCatalogue.js +174 -0
- package/dist/configmodels/DashboardSettings.d.ts +191 -0
- package/dist/configmodels/DashboardSettings.d.ts.map +1 -0
- package/dist/configmodels/DashboardSettings.js +705 -0
- package/dist/configmodels/OniPublishing.d.ts +205 -0
- package/dist/configmodels/OniPublishing.d.ts.map +1 -0
- package/dist/configmodels/OniPublishing.js +335 -0
- package/dist/configmodels/RaidPublishing.d.ts +97 -0
- package/dist/configmodels/RaidPublishing.d.ts.map +1 -0
- package/dist/configmodels/RaidPublishing.js +35 -0
- package/dist/configmodels/WebAnalytics.d.ts +55 -0
- package/dist/configmodels/WebAnalytics.d.ts.map +1 -0
- package/dist/configmodels/WebAnalytics.js +61 -0
- package/dist/controllers/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/AppConfigController.js +4 -1
- package/dist/controllers/BrandingAppController.d.ts +29 -7
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +265 -69
- package/dist/controllers/BrandingController.d.ts +24 -1
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +173 -43
- package/dist/controllers/BrandingControllerSupport.d.ts +20 -0
- package/dist/controllers/BrandingControllerSupport.d.ts.map +1 -0
- package/dist/controllers/BrandingControllerSupport.js +80 -0
- package/dist/controllers/DashboardConfigController.d.ts +6 -2
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/DashboardConfigController.js +18 -4
- package/dist/controllers/DynamicAssetController.d.ts +7 -5
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +21 -12
- package/dist/controllers/RecordController.d.ts +46 -5
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +815 -347
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +4 -1
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +4 -3
- package/dist/controllers/webservice/BrandingController.d.ts +26 -1
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +292 -116
- package/dist/controllers/webservice/DashboardConfigController.d.ts +25 -17
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/DashboardConfigController.js +90 -205
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +37 -3
- package/dist/controllers/webservice/RecordController.d.ts +15 -1
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +664 -271
- package/dist/controllers/webservice/RecordSchemaController.d.ts +32 -0
- package/dist/controllers/webservice/RecordSchemaController.d.ts.map +1 -0
- package/dist/controllers/webservice/RecordSchemaController.js +356 -0
- package/dist/controllers/webservice/RecordTypeController.d.ts +6 -1
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +21 -3
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +7 -3
- 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/index.d.ts +50 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +90 -2
- package/dist/loader/bootstrapShimRuntime.d.ts +1 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +20 -12
- package/dist/loader/index.d.ts +9 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +93 -4
- package/dist/model/BrandingTypeface.d.ts +70 -0
- package/dist/model/BrandingTypeface.d.ts.map +1 -0
- package/dist/model/BrandingTypeface.js +116 -0
- package/dist/model/BuildResponse.d.ts +25 -11
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/BuildResponse.js +4 -3
- package/dist/model/DashboardTypeResponseModel.d.ts +6 -0
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +7 -1
- package/dist/model/DashboardViewResponseModel.d.ts +5 -1
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardViewResponseModel.js +6 -3
- package/dist/model/RBValidationError.d.ts +17 -0
- package/dist/model/RBValidationError.d.ts.map +1 -1
- package/dist/model/RBValidationError.js +37 -1
- package/dist/model/RecordTypeResponseModel.d.ts +12 -4
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +11 -2
- package/dist/model/index.d.ts +5 -1
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +5 -2
- package/dist/model/record-contract.d.ts +42 -0
- package/dist/model/record-contract.d.ts.map +1 -0
- package/dist/model/record-contract.js +3 -0
- package/dist/model/storage/BrandingModel.d.ts +7 -0
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +7 -1
- package/dist/model/storage/DeletedRecordModel.d.ts +35 -0
- package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -1
- package/dist/model/storage/DeletedRecordModel.js +62 -1
- package/dist/model/storage/IntegrationAuditModel.d.ts +16 -2
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
- package/dist/model/storage/IntegrationAuditModel.js +15 -1
- package/dist/model/storage/RecordAuditModel.d.ts +11 -1
- package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
- package/dist/model/storage/RecordAuditModel.js +8 -2
- package/dist/model/storage/RecordModel.d.ts +6 -0
- package/dist/model/storage/RecordModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.d.ts +6 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +4 -1
- package/dist/model/storage/index.d.ts +12 -10
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +24 -2
- package/dist/model/storage/record-schema.d.ts +115 -0
- package/dist/model/storage/record-schema.d.ts.map +1 -0
- package/dist/model/storage/record-schema.js +3 -0
- package/dist/policies/checkAuth.d.ts +2 -6
- package/dist/policies/checkAuth.d.ts.map +1 -1
- package/dist/policies/checkAuth.js +32 -9
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +85 -2
- package/dist/policies/index.d.ts +3 -2
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +4 -2
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -1
- package/dist/policies/validateApiContractRequest.js +49 -11
- package/dist/record-contract/ajv-error-mapper.d.ts +34 -0
- package/dist/record-contract/ajv-error-mapper.d.ts.map +1 -0
- package/dist/record-contract/ajv-error-mapper.js +153 -0
- package/dist/record-contract/canonical-json.d.ts +20 -0
- package/dist/record-contract/canonical-json.d.ts.map +1 -0
- package/dist/record-contract/canonical-json.js +126 -0
- package/dist/record-contract/codes.d.ts +36 -0
- package/dist/record-contract/codes.d.ts.map +1 -0
- package/dist/record-contract/codes.js +38 -0
- package/dist/record-contract/contributor-registry.d.ts +76 -0
- package/dist/record-contract/contributor-registry.d.ts.map +1 -0
- package/dist/record-contract/contributor-registry.js +126 -0
- package/dist/record-contract/core-contributors.d.ts +44 -0
- package/dist/record-contract/core-contributors.d.ts.map +1 -0
- package/dist/record-contract/core-contributors.js +395 -0
- package/dist/record-contract/deep-freeze.d.ts +3 -0
- package/dist/record-contract/deep-freeze.d.ts.map +1 -0
- package/dist/record-contract/deep-freeze.js +23 -0
- package/dist/record-contract/index.d.ts +13 -0
- package/dist/record-contract/index.d.ts.map +1 -0
- package/dist/record-contract/index.js +29 -0
- package/dist/record-contract/json-pointer.d.ts +20 -0
- package/dist/record-contract/json-pointer.d.ts.map +1 -0
- package/dist/record-contract/json-pointer.js +70 -0
- package/dist/record-contract/json-schema-renderer.d.ts +51 -0
- package/dist/record-contract/json-schema-renderer.d.ts.map +1 -0
- package/dist/record-contract/json-schema-renderer.js +450 -0
- package/dist/record-contract/record-contract-compiler.d.ts +42 -0
- package/dist/record-contract/record-contract-compiler.d.ts.map +1 -0
- package/dist/record-contract/record-contract-compiler.js +775 -0
- package/dist/record-contract/record-contract-context.d.ts +91 -0
- package/dist/record-contract/record-contract-context.d.ts.map +1 -0
- package/dist/record-contract/record-contract-context.js +39 -0
- package/dist/record-contract/record-json-schema-artifact.d.ts +74 -0
- package/dist/record-contract/record-json-schema-artifact.d.ts.map +1 -0
- package/dist/record-contract/record-json-schema-artifact.js +309 -0
- package/dist/record-contract/record-json-schema-etag.d.ts +15 -0
- package/dist/record-contract/record-json-schema-etag.d.ts.map +1 -0
- package/dist/record-contract/record-json-schema-etag.js +41 -0
- package/dist/record-contract/types.d.ts +151 -0
- package/dist/record-contract/types.d.ts.map +1 -0
- package/dist/record-contract/types.js +6 -0
- package/dist/services/AppConfigService.d.ts +6 -0
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +23 -1
- package/dist/services/AttachmentMetadataService.d.ts +58 -0
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -1
- package/dist/services/AttachmentMetadataService.js +643 -8
- package/dist/services/BrandingLogoService.d.ts +6 -1
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +77 -9
- package/dist/services/BrandingService.d.ts +171 -9
- package/dist/services/BrandingService.d.ts.map +1 -1
- package/dist/services/BrandingService.js +572 -68
- package/dist/services/BrandingThemeCssService.d.ts +17 -1
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
- package/dist/services/BrandingThemeCssService.js +71 -9
- package/dist/services/BrandingThemeTokens.d.ts.map +1 -1
- package/dist/services/BrandingThemeTokens.js +2 -1
- package/dist/services/BrandingTypefaceService.d.ts +74 -0
- package/dist/services/BrandingTypefaceService.d.ts.map +1 -0
- package/dist/services/BrandingTypefaceService.js +359 -0
- package/dist/services/BrandingWoff2Inspector.d.ts +17 -0
- package/dist/services/BrandingWoff2Inspector.d.ts.map +1 -0
- package/dist/services/BrandingWoff2Inspector.js +402 -0
- package/dist/services/DashboardConfigService.d.ts +214 -54
- package/dist/services/DashboardConfigService.d.ts.map +1 -1
- package/dist/services/DashboardConfigService.js +829 -261
- package/dist/services/DashboardLegacyConversion.d.ts +82 -0
- package/dist/services/DashboardLegacyConversion.d.ts.map +1 -0
- package/dist/services/DashboardLegacyConversion.js +427 -0
- package/dist/services/DashboardTypesService.d.ts +15 -4
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +72 -139
- package/dist/services/DoiService.d.ts +1 -1
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +71 -45
- package/dist/services/FigshareService.d.ts +1 -1
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +73 -32
- package/dist/services/FormRecordConsistencyService.d.ts +8 -23
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +54 -70
- package/dist/services/FormsService.d.ts +91 -2
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +324 -64
- package/dist/services/HarvestRunService.d.ts +6 -3
- package/dist/services/HarvestRunService.d.ts.map +1 -1
- package/dist/services/HarvestRunService.js +161 -97
- package/dist/services/I18nEntriesService.d.ts +1 -0
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +26 -6
- package/dist/services/OniService.d.ts +19 -62
- package/dist/services/OniService.d.ts.map +1 -1
- package/dist/services/OniService.js +223 -691
- 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 +19 -61
- package/dist/services/RaidService.d.ts.map +1 -1
- package/dist/services/RaidService.js +191 -530
- package/dist/services/RecordSchemaService.d.ts +440 -0
- package/dist/services/RecordSchemaService.d.ts.map +1 -0
- package/dist/services/RecordSchemaService.js +3061 -0
- package/dist/services/RecordTypesService.d.ts +29 -0
- package/dist/services/RecordTypesService.d.ts.map +1 -1
- package/dist/services/RecordTypesService.js +106 -11
- package/dist/services/RecordValidationService.d.ts +340 -0
- package/dist/services/RecordValidationService.d.ts.map +1 -0
- package/dist/services/RecordValidationService.js +1898 -0
- package/dist/services/RecordsService.d.ts +313 -22
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +4948 -509
- package/dist/services/SolrSearchService.d.ts +1 -1
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +42 -12
- package/dist/services/StandardDatastreamService.d.ts +4 -0
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +109 -45
- package/dist/services/TriggerService.d.ts.map +1 -1
- package/dist/services/TriggerService.js +54 -30
- package/dist/services/UsersService.d.ts +2 -1
- package/dist/services/UsersService.d.ts.map +1 -1
- package/dist/services/UsersService.js +364 -283
- package/dist/services/VocabularyService.d.ts +2 -0
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +61 -2
- package/dist/services/WorkflowStepsService.d.ts +11 -0
- package/dist/services/WorkflowStepsService.d.ts.map +1 -1
- package/dist/services/WorkflowStepsService.js +32 -3
- 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 +3 -20
- package/dist/services/doi-v2/config.d.ts +1 -0
- package/dist/services/doi-v2/config.d.ts.map +1 -1
- package/dist/services/doi-v2/config.js +13 -5
- package/dist/services/doi-v2/runtime.d.ts.map +1 -1
- package/dist/services/doi-v2/runtime.js +14 -54
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
- package/dist/services/figshare-v2/bindings.js +3 -20
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +11 -58
- package/dist/services/form-record-access-user.d.ts +3 -0
- package/dist/services/form-record-access-user.d.ts.map +1 -0
- package/dist/services/form-record-access-user.js +23 -0
- package/dist/services/index.d.ts +9 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +45 -3
- package/dist/services/integration-v2/bindings.d.ts +3 -0
- package/dist/services/integration-v2/bindings.d.ts.map +1 -0
- package/dist/services/integration-v2/bindings.js +91 -0
- package/dist/services/integration-v2/runtime.d.ts +3 -0
- package/dist/services/integration-v2/runtime.d.ts.map +1 -0
- package/dist/services/integration-v2/runtime.js +50 -0
- package/dist/services/internal-record-schema-authorization.d.ts +8 -0
- package/dist/services/internal-record-schema-authorization.d.ts.map +1 -0
- package/dist/services/internal-record-schema-authorization.js +16 -0
- package/dist/services/oni-v2/audit.d.ts +19 -0
- package/dist/services/oni-v2/audit.d.ts.map +1 -0
- package/dist/services/oni-v2/audit.js +50 -0
- package/dist/services/oni-v2/bindings.d.ts +7 -0
- package/dist/services/oni-v2/bindings.d.ts.map +1 -0
- package/dist/services/oni-v2/bindings.js +31 -0
- package/dist/services/oni-v2/config.d.ts +12 -0
- package/dist/services/oni-v2/config.d.ts.map +1 -0
- package/dist/services/oni-v2/config.js +134 -0
- package/dist/services/oni-v2/context.d.ts +3 -0
- package/dist/services/oni-v2/context.d.ts.map +1 -0
- package/dist/services/oni-v2/context.js +17 -0
- package/dist/services/oni-v2/crate.d.ts +17 -0
- package/dist/services/oni-v2/crate.d.ts.map +1 -0
- package/dist/services/oni-v2/crate.js +504 -0
- package/dist/services/oni-v2/flydriveOcflStore.d.ts +69 -0
- package/dist/services/oni-v2/flydriveOcflStore.d.ts.map +1 -0
- package/dist/services/oni-v2/flydriveOcflStore.js +325 -0
- package/dist/services/oni-v2/ingestion.d.ts +37 -0
- package/dist/services/oni-v2/ingestion.d.ts.map +1 -0
- package/dist/services/oni-v2/ingestion.js +91 -0
- package/dist/services/oni-v2/mapping.d.ts +17 -0
- package/dist/services/oni-v2/mapping.d.ts.map +1 -0
- package/dist/services/oni-v2/mapping.js +137 -0
- package/dist/services/oni-v2/repository.d.ts +9 -0
- package/dist/services/oni-v2/repository.d.ts.map +1 -0
- package/dist/services/oni-v2/repository.js +180 -0
- package/dist/services/oni-v2/runtime.d.ts +23 -0
- package/dist/services/oni-v2/runtime.d.ts.map +1 -0
- package/dist/services/oni-v2/runtime.js +121 -0
- package/dist/services/oni-v2/templating.d.ts +11 -0
- package/dist/services/oni-v2/templating.d.ts.map +1 -0
- package/dist/services/oni-v2/templating.js +27 -0
- package/dist/services/oni-v2/types.d.ts +100 -0
- package/dist/services/oni-v2/types.d.ts.map +1 -0
- package/dist/services/oni-v2/types.js +3 -0
- package/dist/services/raid-v2/audit.d.ts +10 -0
- package/dist/services/raid-v2/audit.d.ts.map +1 -0
- package/dist/services/raid-v2/audit.js +29 -0
- package/dist/services/raid-v2/errors.d.ts +85 -0
- package/dist/services/raid-v2/errors.d.ts.map +1 -0
- package/dist/services/raid-v2/errors.js +36 -0
- package/dist/services/raid-v2/http.d.ts +4 -0
- package/dist/services/raid-v2/http.d.ts.map +1 -0
- package/dist/services/raid-v2/http.js +84 -0
- package/dist/services/raid-v2/logger.d.ts +8 -0
- package/dist/services/raid-v2/logger.d.ts.map +1 -0
- package/dist/services/raid-v2/logger.js +30 -0
- package/dist/services/raid-v2/mapping.d.ts +9 -0
- package/dist/services/raid-v2/mapping.d.ts.map +1 -0
- package/dist/services/raid-v2/mapping.js +168 -0
- package/dist/services/raid-v2/runtime.d.ts +5 -0
- package/dist/services/raid-v2/runtime.d.ts.map +1 -0
- package/dist/services/raid-v2/runtime.js +135 -0
- package/dist/services/raid-v2/tags.d.ts +11 -0
- package/dist/services/raid-v2/tags.d.ts.map +1 -0
- package/dist/services/raid-v2/tags.js +12 -0
- package/dist/services/raid-v2/types.d.ts +66 -0
- package/dist/services/raid-v2/types.d.ts.map +1 -0
- package/dist/services/raid-v2/types.js +3 -0
- package/dist/services/record-hooks/coordinator.d.ts +64 -0
- package/dist/services/record-hooks/coordinator.d.ts.map +1 -0
- package/dist/services/record-hooks/coordinator.js +276 -0
- package/dist/visitor/client.visitor.d.ts +6 -0
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +59 -14
- package/dist/visitor/construct.visitor.d.ts +27 -1
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +265 -177
- package/dist/visitor/context-variables.visitor.d.ts +3 -1
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +15 -1
- package/dist/visitor/data-value.visitor.d.ts +6 -0
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +10 -1
- package/dist/visitor/json-type-def.visitor.d.ts +6 -0
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +10 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +11 -0
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +228 -133
- package/dist/visitor/related-object-data-inline.visitor.d.ts +31 -0
- package/dist/visitor/related-object-data-inline.visitor.d.ts.map +1 -0
- package/dist/visitor/related-object-data-inline.visitor.js +96 -0
- package/dist/visitor/template.visitor.d.ts +17 -2
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +60 -22
- package/dist/visitor/validator.visitor.d.ts +49 -7
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +275 -178
- package/dist/waterline-models/AttachmentMetadata.d.ts +22 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -1
- package/dist/waterline-models/AttachmentMetadata.js +147 -3
- package/dist/waterline-models/BrandingConfig.d.ts +7 -0
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +16 -1
- package/dist/waterline-models/BrandingConfigHistory.d.ts +11 -2
- package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfigHistory.js +21 -1
- package/dist/waterline-models/DashboardConfiguration.d.ts +29 -0
- package/dist/waterline-models/DashboardConfiguration.d.ts.map +1 -0
- package/dist/waterline-models/DashboardConfiguration.js +52 -0
- package/dist/waterline-models/RecordType.d.ts +9 -0
- package/dist/waterline-models/RecordType.d.ts.map +1 -1
- package/dist/waterline-models/RecordType.js +16 -1
- package/dist/waterline-models/User.d.ts.map +1 -1
- package/dist/waterline-models/User.js +10 -15
- package/dist/waterline-models/index.d.ts +2 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +4 -1
- package/package.json +60 -47
- package/dist/config/datapubs.config.d.ts +0 -72
- package/dist/config/datapubs.config.d.ts.map +0 -1
- package/dist/config/datapubs.config.js +0 -74
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { AvailableFormComponentDefinitionFrames, FormComponentDefinitionFrame, FormConfigFrame } from '@researchdatabox/sails-ng-common';
|
|
2
|
+
import type { ContractJsonObject, RecordContractPublicContext, RecordContractSchemaKind } from './types';
|
|
3
|
+
/** The authorization facts required by authoritative context resolution. */
|
|
4
|
+
export interface RecordContractContextActor {
|
|
5
|
+
readonly authenticated: boolean;
|
|
6
|
+
readonly roles: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
interface RecordContractContextRequestBase {
|
|
9
|
+
readonly brand: string;
|
|
10
|
+
readonly portal: string;
|
|
11
|
+
readonly operation?: string;
|
|
12
|
+
readonly actor: RecordContractContextActor;
|
|
13
|
+
}
|
|
14
|
+
/** Inputs needed to select an authoritative create form and operation. */
|
|
15
|
+
export interface RecordContractCreateContextRequest extends RecordContractContextRequestBase {
|
|
16
|
+
readonly kind: 'create';
|
|
17
|
+
readonly recordType: string;
|
|
18
|
+
/** Optional actor-authorized workflow target whose configured form becomes authoritative. */
|
|
19
|
+
readonly targetStep?: string;
|
|
20
|
+
readonly oid?: never;
|
|
21
|
+
}
|
|
22
|
+
/** Inputs needed to authorize and resolve an authoritative update context. */
|
|
23
|
+
export interface RecordContractUpdateContextRequest extends RecordContractContextRequestBase {
|
|
24
|
+
readonly kind: 'update';
|
|
25
|
+
readonly oid: string;
|
|
26
|
+
readonly recordType?: never;
|
|
27
|
+
}
|
|
28
|
+
export type RecordContractContextRequest = RecordContractCreateContextRequest | RecordContractUpdateContextRequest;
|
|
29
|
+
export type RecordContractContextFailureKind = 'invalid-request' | 'not-found' | 'forbidden' | 'not-resolvable' | 'unavailable';
|
|
30
|
+
/** Typed authoritative-context failure that never exposes record or caller values. */
|
|
31
|
+
export declare class RecordContractContextResolutionError extends Error {
|
|
32
|
+
readonly failureKind: RecordContractContextFailureKind;
|
|
33
|
+
readonly diagnosticCodes: readonly string[];
|
|
34
|
+
constructor(failureKind: RecordContractContextFailureKind, diagnosticCodes?: readonly string[]);
|
|
35
|
+
}
|
|
36
|
+
/** Source form retained before caller- and candidate-dependent contract construction. */
|
|
37
|
+
export type RecordContractSourceForm = Readonly<Omit<FormConfigFrame, 'componentDefinitions'>> & {
|
|
38
|
+
readonly componentDefinitions: readonly AvailableFormComponentDefinitionFrames[];
|
|
39
|
+
};
|
|
40
|
+
export type RecordContractReusableFormDefinitions = Readonly<Record<string, readonly AvailableFormComponentDefinitionFrames[]>>;
|
|
41
|
+
/** Class-backed, hook-extensible form data accepted at the compiler boundary. */
|
|
42
|
+
export type RecordContractEffectiveForm = Readonly<Omit<FormConfigFrame, 'componentDefinitions'>> & {
|
|
43
|
+
readonly componentDefinitions: readonly FormComponentDefinitionFrame[];
|
|
44
|
+
};
|
|
45
|
+
interface RecordContractResolutionDataBase {
|
|
46
|
+
readonly sourceFormFingerprint: string;
|
|
47
|
+
readonly sourceForm: RecordContractSourceForm;
|
|
48
|
+
readonly reusableFormDefinitions: RecordContractReusableFormDefinitions;
|
|
49
|
+
readonly actor: RecordContractContextActor;
|
|
50
|
+
readonly formMode: 'edit' | 'view';
|
|
51
|
+
readonly contextVariables: ContractJsonObject;
|
|
52
|
+
}
|
|
53
|
+
export interface RecordContractCreateResolutionData extends RecordContractResolutionDataBase {
|
|
54
|
+
readonly oid?: never;
|
|
55
|
+
readonly existingRecord?: never;
|
|
56
|
+
}
|
|
57
|
+
export interface RecordContractUpdateResolutionData extends RecordContractResolutionDataBase {
|
|
58
|
+
readonly oid: string;
|
|
59
|
+
readonly existingRecord: Readonly<Record<string, unknown>>;
|
|
60
|
+
}
|
|
61
|
+
type RecordContractPublicContextFor<Kind extends RecordContractSchemaKind> = Omit<RecordContractPublicContext, 'kind'> & {
|
|
62
|
+
readonly kind: Kind;
|
|
63
|
+
};
|
|
64
|
+
export interface RecordContractCreateContext {
|
|
65
|
+
readonly publicContext: RecordContractPublicContextFor<'create'>;
|
|
66
|
+
readonly resolution: RecordContractCreateResolutionData;
|
|
67
|
+
}
|
|
68
|
+
export interface RecordContractUpdateContext {
|
|
69
|
+
readonly publicContext: RecordContractPublicContextFor<'update'>;
|
|
70
|
+
readonly resolution: RecordContractUpdateResolutionData;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Authoritative context resolution result. Only `publicContext` may cross the
|
|
74
|
+
* compiler/renderer boundary; `resolution` remains private service data.
|
|
75
|
+
*/
|
|
76
|
+
export type RecordContractContext = RecordContractCreateContext | RecordContractUpdateContext;
|
|
77
|
+
/** A role- and mode-effective form that is safe to pass to contract compilation. */
|
|
78
|
+
export interface RecordContractFormBuildSuccess {
|
|
79
|
+
readonly ok: true;
|
|
80
|
+
readonly effectiveForm: RecordContractEffectiveForm;
|
|
81
|
+
}
|
|
82
|
+
/** Contract construction cannot continue when no effective form components remain. */
|
|
83
|
+
export interface RecordContractFormBuildFailure {
|
|
84
|
+
readonly ok: false;
|
|
85
|
+
readonly reason: 'empty-effective-form';
|
|
86
|
+
}
|
|
87
|
+
export type RecordContractFormBuildResult = RecordContractFormBuildSuccess | RecordContractFormBuildFailure;
|
|
88
|
+
/** Build a detached, immutable allowlisted snapshot for schema serialization. */
|
|
89
|
+
export declare function snapshotRecordContractPublicContext(context: RecordContractPublicContext): RecordContractPublicContext;
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=record-contract-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-contract-context.d.ts","sourceRoot":"","sources":["../../src/record-contract/record-contract-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RecordContractContextResolutionError = void 0;
|
|
4
|
+
exports.snapshotRecordContractPublicContext = snapshotRecordContractPublicContext;
|
|
5
|
+
/** Typed authoritative-context failure that never exposes record or caller values. */
|
|
6
|
+
class RecordContractContextResolutionError extends Error {
|
|
7
|
+
failureKind;
|
|
8
|
+
diagnosticCodes;
|
|
9
|
+
constructor(failureKind, diagnosticCodes = []) {
|
|
10
|
+
super(`Record contract context resolution failed (${failureKind}).`);
|
|
11
|
+
this.failureKind = failureKind;
|
|
12
|
+
this.name = 'RecordContractContextResolutionError';
|
|
13
|
+
this.diagnosticCodes = Object.freeze([...new Set(diagnosticCodes)].sort());
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.RecordContractContextResolutionError = RecordContractContextResolutionError;
|
|
17
|
+
const PUBLIC_CONTEXT_STRING_FIELDS = ['brand', 'portal', 'recordType', 'workflowStep', 'form', 'operation'];
|
|
18
|
+
/** Build a detached, immutable allowlisted snapshot for schema serialization. */
|
|
19
|
+
function snapshotRecordContractPublicContext(context) {
|
|
20
|
+
const snapshot = {
|
|
21
|
+
brand: context.brand,
|
|
22
|
+
portal: context.portal,
|
|
23
|
+
kind: context.kind,
|
|
24
|
+
recordType: context.recordType,
|
|
25
|
+
workflowStep: context.workflowStep,
|
|
26
|
+
form: context.form,
|
|
27
|
+
operation: context.operation,
|
|
28
|
+
unknownProperties: context.unknownProperties,
|
|
29
|
+
enforcement: context.enforcement,
|
|
30
|
+
};
|
|
31
|
+
if (!PUBLIC_CONTEXT_STRING_FIELDS.every(field => typeof snapshot[field] === 'string') ||
|
|
32
|
+
!['create', 'update'].includes(snapshot.kind) ||
|
|
33
|
+
!['allow', 'declared'].includes(snapshot.unknownProperties) ||
|
|
34
|
+
!['shadow', 'enforce'].includes(snapshot.enforcement)) {
|
|
35
|
+
throw new Error('Record-contract public context is invalid.');
|
|
36
|
+
}
|
|
37
|
+
return Object.freeze(snapshot);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLWNvbnRyYWN0LWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVjb3JkLWNvbnRyYWN0L3JlY29yZC1jb250cmFjdC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWlJQSxrRkFxQkM7QUE1R0Qsc0ZBQXNGO0FBQ3RGLE1BQWEsb0NBQXFDLFNBQVEsS0FBSztJQUkzQztJQUhGLGVBQWUsQ0FBb0I7SUFFbkQsWUFDa0IsV0FBNkMsRUFDN0Qsa0JBQXFDLEVBQUU7UUFFdkMsS0FBSyxDQUFDLDhDQUE4QyxXQUFXLElBQUksQ0FBQyxDQUFDO1FBSHJELGdCQUFXLEdBQVgsV0FBVyxDQUFrQztRQUk3RCxJQUFJLENBQUMsSUFBSSxHQUFHLHNDQUFzQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7Q0FDRjtBQVhELG9GQVdDO0FBd0VELE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBVSxDQUFDO0FBRXJILGlGQUFpRjtBQUNqRixTQUFnQixtQ0FBbUMsQ0FBQyxPQUFvQztJQUN0RixNQUFNLFFBQVEsR0FBZ0M7UUFDNUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7UUFDNUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0tBQ2pDLENBQUM7SUFDRixJQUNFLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDO1FBQ2pGLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDN0MsQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1FBQzNELENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFDckQsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDLENBQUMifQ==
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type RecordSchemaValidationProblem } from './ajv-error-mapper';
|
|
2
|
+
import type { RecordJsonSchemaDocument } from './json-schema-renderer';
|
|
3
|
+
/** Annotation-only keywords emitted directly by the v1 renderer/compiler. */
|
|
4
|
+
export declare const RECORD_JSON_SCHEMA_ANNOTATION_KEYWORDS: readonly ["x-redbox-completeness", "x-redbox-context", "x-redbox-contract-format", "x-redbox-diagnostics", "x-redbox-unsupported-component", "x-redbox-validation"];
|
|
5
|
+
export type RecordJsonSchemaEtag = `"sha256:${string}"`;
|
|
6
|
+
export interface PublishedRecordJsonSchemaDocument extends RecordJsonSchemaDocument {
|
|
7
|
+
readonly $id: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RecordJsonSchemaIdentity {
|
|
10
|
+
readonly digest: string;
|
|
11
|
+
readonly document: PublishedRecordJsonSchemaDocument;
|
|
12
|
+
readonly canonicalJson: string;
|
|
13
|
+
readonly byteLength: number;
|
|
14
|
+
readonly etag: RecordJsonSchemaEtag;
|
|
15
|
+
}
|
|
16
|
+
export type RecordJsonSchemaIdentityErrorReason = 'invalid-context' | 'invalid-limit';
|
|
17
|
+
export declare class RecordJsonSchemaIdentityError extends Error {
|
|
18
|
+
readonly reason: RecordJsonSchemaIdentityErrorReason;
|
|
19
|
+
constructor(reason: RecordJsonSchemaIdentityErrorReason, message: string);
|
|
20
|
+
}
|
|
21
|
+
export declare class RecordJsonSchemaDocumentLimitError extends Error {
|
|
22
|
+
readonly byteLength: number;
|
|
23
|
+
readonly maxDocumentBytes: number;
|
|
24
|
+
readonly code: "record-schema.limit-document-bytes";
|
|
25
|
+
constructor(byteLength: number, maxDocumentBytes: number);
|
|
26
|
+
}
|
|
27
|
+
/** Public validator issue shape containing only safe, mapped structural data. */
|
|
28
|
+
export type RecordJsonSchemaValidationIssue = RecordSchemaValidationProblem;
|
|
29
|
+
export type RecordJsonSchemaValidationResult = {
|
|
30
|
+
readonly valid: true;
|
|
31
|
+
readonly issues: readonly [];
|
|
32
|
+
readonly truncated: false;
|
|
33
|
+
} | {
|
|
34
|
+
readonly valid: false;
|
|
35
|
+
readonly issues: readonly RecordJsonSchemaValidationIssue[];
|
|
36
|
+
readonly truncated: boolean;
|
|
37
|
+
};
|
|
38
|
+
export interface CompiledRecordJsonSchemaValidator {
|
|
39
|
+
readonly validate: (input: unknown) => RecordJsonSchemaValidationResult;
|
|
40
|
+
}
|
|
41
|
+
export interface CompiledRecordJsonSchemaArtifact extends RecordJsonSchemaIdentity {
|
|
42
|
+
readonly validator: CompiledRecordJsonSchemaValidator;
|
|
43
|
+
}
|
|
44
|
+
export type RecordJsonSchemaCompilationErrorReason = 'compile' | 'metaschema';
|
|
45
|
+
export declare class RecordJsonSchemaCompilationError extends Error {
|
|
46
|
+
readonly reason: RecordJsonSchemaCompilationErrorReason;
|
|
47
|
+
readonly issues: readonly RecordJsonSchemaValidationIssue[];
|
|
48
|
+
readonly truncated: boolean;
|
|
49
|
+
readonly code: "record-schema.invalid-contract";
|
|
50
|
+
constructor(reason: RecordJsonSchemaCompilationErrorReason, issues: readonly RecordJsonSchemaValidationIssue[], truncated?: boolean);
|
|
51
|
+
}
|
|
52
|
+
export interface RecordJsonSchemaArtifactCompilerOptions {
|
|
53
|
+
readonly maxDocumentBytes: number;
|
|
54
|
+
readonly maxValidationErrors: number;
|
|
55
|
+
}
|
|
56
|
+
/** Normalize the compiler-owned unordered arrays without reordering semantic arrays such as examples. */
|
|
57
|
+
export declare function normalizeRecordJsonSchemaDocument(document: unknown): RecordJsonSchemaDocument;
|
|
58
|
+
/**
|
|
59
|
+
* Compute whole-document identity, excluding the protected root `$id`, then
|
|
60
|
+
* inject the digest-addressed origin-relative identifier and size the final
|
|
61
|
+
* Redbox Canonical JSON v1 representation.
|
|
62
|
+
*/
|
|
63
|
+
export declare function identifyRecordJsonSchema(document: RecordJsonSchemaDocument, maxDocumentBytes: number): RecordJsonSchemaIdentity;
|
|
64
|
+
/** Canonical identity plus a non-mutating AJV 2020 validator for the exact published document. */
|
|
65
|
+
export declare class RecordJsonSchemaArtifactCompiler {
|
|
66
|
+
private readonly options;
|
|
67
|
+
private readonly ajv;
|
|
68
|
+
private readonly registeredKeywords;
|
|
69
|
+
constructor(options: Readonly<RecordJsonSchemaArtifactCompilerOptions>);
|
|
70
|
+
compile(document: RecordJsonSchemaDocument): CompiledRecordJsonSchemaArtifact;
|
|
71
|
+
private registerAnnotations;
|
|
72
|
+
}
|
|
73
|
+
export declare function compileRecordJsonSchemaArtifact(document: RecordJsonSchemaDocument, options: Readonly<RecordJsonSchemaArtifactCompilerOptions>): CompiledRecordJsonSchemaArtifact;
|
|
74
|
+
//# sourceMappingURL=record-json-schema-artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-json-schema-artifact.d.ts","sourceRoot":"","sources":["../../src/record-contract/record-json-schema-artifact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RecordJsonSchemaArtifactCompiler = exports.RecordJsonSchemaCompilationError = exports.RecordJsonSchemaDocumentLimitError = exports.RecordJsonSchemaIdentityError = exports.RECORD_JSON_SCHEMA_ANNOTATION_KEYWORDS = void 0;
|
|
7
|
+
exports.normalizeRecordJsonSchemaDocument = normalizeRecordJsonSchemaDocument;
|
|
8
|
+
exports.identifyRecordJsonSchema = identifyRecordJsonSchema;
|
|
9
|
+
exports.compileRecordJsonSchemaArtifact = compileRecordJsonSchemaArtifact;
|
|
10
|
+
const crypto_1 = require("crypto");
|
|
11
|
+
const _2020_1 = __importDefault(require("ajv/dist/2020"));
|
|
12
|
+
const ajv_error_mapper_1 = require("./ajv-error-mapper");
|
|
13
|
+
const codes_1 = require("./codes");
|
|
14
|
+
const canonical_json_1 = require("./canonical-json");
|
|
15
|
+
const DIGEST_PATTERN = /^[0-9a-f]{64}$/;
|
|
16
|
+
const CONTRIBUTOR_ANNOTATION_KEY = /^(?:x-[A-Za-z0-9_$:-]+|[A-Za-z_$][A-Za-z0-9_$:-]*:[A-Za-z0-9_$:-]+)$/;
|
|
17
|
+
const SCHEMA_MAP_KEYWORDS = new Set(['$defs', 'properties']);
|
|
18
|
+
const SCHEMA_OBJECT_KEYWORDS = new Set(['else', 'if', 'items', 'not', 'then']);
|
|
19
|
+
const SCHEMA_ARRAY_KEYWORDS = new Set(['allOf', 'anyOf']);
|
|
20
|
+
/** Annotation-only keywords emitted directly by the v1 renderer/compiler. */
|
|
21
|
+
exports.RECORD_JSON_SCHEMA_ANNOTATION_KEYWORDS = Object.freeze([
|
|
22
|
+
'x-redbox-completeness',
|
|
23
|
+
'x-redbox-context',
|
|
24
|
+
'x-redbox-contract-format',
|
|
25
|
+
'x-redbox-diagnostics',
|
|
26
|
+
'x-redbox-unsupported-component',
|
|
27
|
+
'x-redbox-validation',
|
|
28
|
+
]);
|
|
29
|
+
class RecordJsonSchemaIdentityError extends Error {
|
|
30
|
+
reason;
|
|
31
|
+
constructor(reason, message) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.reason = reason;
|
|
34
|
+
this.name = 'RecordJsonSchemaIdentityError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.RecordJsonSchemaIdentityError = RecordJsonSchemaIdentityError;
|
|
38
|
+
class RecordJsonSchemaDocumentLimitError extends Error {
|
|
39
|
+
byteLength;
|
|
40
|
+
maxDocumentBytes;
|
|
41
|
+
code = codes_1.RECORD_SCHEMA_PROBLEM_CODES.LIMIT_DOCUMENT_BYTES;
|
|
42
|
+
constructor(byteLength, maxDocumentBytes) {
|
|
43
|
+
super(`The canonical record JSON Schema is ${byteLength} bytes and exceeds the ${maxDocumentBytes}-byte limit.`);
|
|
44
|
+
this.byteLength = byteLength;
|
|
45
|
+
this.maxDocumentBytes = maxDocumentBytes;
|
|
46
|
+
this.name = 'RecordJsonSchemaDocumentLimitError';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.RecordJsonSchemaDocumentLimitError = RecordJsonSchemaDocumentLimitError;
|
|
50
|
+
class RecordJsonSchemaCompilationError extends Error {
|
|
51
|
+
reason;
|
|
52
|
+
issues;
|
|
53
|
+
truncated;
|
|
54
|
+
code = codes_1.RECORD_SCHEMA_PROBLEM_CODES.INVALID_CONTRACT;
|
|
55
|
+
constructor(reason, issues, truncated = false) {
|
|
56
|
+
super(reason === 'metaschema'
|
|
57
|
+
? 'The generated record JSON Schema does not satisfy the draft 2020-12 metaschema.'
|
|
58
|
+
: 'The generated record JSON Schema could not be compiled by AJV 2020.');
|
|
59
|
+
this.reason = reason;
|
|
60
|
+
this.issues = issues;
|
|
61
|
+
this.truncated = truncated;
|
|
62
|
+
this.name = 'RecordJsonSchemaCompilationError';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.RecordJsonSchemaCompilationError = RecordJsonSchemaCompilationError;
|
|
66
|
+
function compareLexicographically(left, right) {
|
|
67
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
68
|
+
}
|
|
69
|
+
function assertPositiveInteger(value, name) {
|
|
70
|
+
if (!Number.isFinite(value) || !Number.isInteger(value) || value <= 0) {
|
|
71
|
+
throw new RecordJsonSchemaIdentityError('invalid-limit', `${name} must be a finite positive integer.`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function isJsonObject(value) {
|
|
75
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
76
|
+
}
|
|
77
|
+
function sortCanonicalValues(values) {
|
|
78
|
+
return [...values].sort((left, right) => compareLexicographically((0, canonical_json_1.serializeRedboxCanonicalJsonV1)(left), (0, canonical_json_1.serializeRedboxCanonicalJsonV1)(right)));
|
|
79
|
+
}
|
|
80
|
+
function normalizeValidationSummary(value) {
|
|
81
|
+
if (!isJsonObject(value)) {
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
return Object.fromEntries(Object.keys(value)
|
|
85
|
+
.sort(compareLexicographically)
|
|
86
|
+
.map(key => {
|
|
87
|
+
const child = value[key];
|
|
88
|
+
if ((key === 'groups' || key === 'operations' || key === 'pointers') && Array.isArray(child)) {
|
|
89
|
+
return [key, sortCanonicalValues(child)];
|
|
90
|
+
}
|
|
91
|
+
return [key, child];
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
function normalizeSchemaMap(value) {
|
|
95
|
+
if (!isJsonObject(value)) {
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
return Object.fromEntries(Object.keys(value)
|
|
99
|
+
.sort(compareLexicographically)
|
|
100
|
+
.map(key => [key, normalizeSchema(value[key])]));
|
|
101
|
+
}
|
|
102
|
+
function normalizeSchema(value) {
|
|
103
|
+
if (!isJsonObject(value)) {
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
return Object.fromEntries(Object.keys(value)
|
|
107
|
+
.sort(compareLexicographically)
|
|
108
|
+
.map(key => {
|
|
109
|
+
const child = value[key];
|
|
110
|
+
if ((key === 'enum' || key === 'required' || key === 'type') && Array.isArray(child)) {
|
|
111
|
+
return [key, sortCanonicalValues(child)];
|
|
112
|
+
}
|
|
113
|
+
if (key === 'x-redbox-validation' && Array.isArray(child)) {
|
|
114
|
+
return [key, sortCanonicalValues(child.map(normalizeValidationSummary))];
|
|
115
|
+
}
|
|
116
|
+
if (key === 'x-redbox-diagnostics' && Array.isArray(child)) {
|
|
117
|
+
return [key, sortCanonicalValues(child)];
|
|
118
|
+
}
|
|
119
|
+
if (SCHEMA_MAP_KEYWORDS.has(key)) {
|
|
120
|
+
return [key, normalizeSchemaMap(child)];
|
|
121
|
+
}
|
|
122
|
+
if (SCHEMA_OBJECT_KEYWORDS.has(key)) {
|
|
123
|
+
return [key, normalizeSchema(child)];
|
|
124
|
+
}
|
|
125
|
+
if (SCHEMA_ARRAY_KEYWORDS.has(key) && Array.isArray(child)) {
|
|
126
|
+
return [key, child.map(normalizeSchema)];
|
|
127
|
+
}
|
|
128
|
+
// Annotation payloads are JSON data, not nested schemas. Their array
|
|
129
|
+
// order is part of whole-document identity even when a data property
|
|
130
|
+
// happens to be named `type`, `enum`, or `required`.
|
|
131
|
+
return [key, child];
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
/** Normalize the compiler-owned unordered arrays without reordering semantic arrays such as examples. */
|
|
135
|
+
function normalizeRecordJsonSchemaDocument(document) {
|
|
136
|
+
const jsonValue = (0, canonical_json_1.normalizeRedboxCanonicalJsonV1)(document);
|
|
137
|
+
if (!isJsonObject(jsonValue)) {
|
|
138
|
+
throw new RecordJsonSchemaIdentityError('invalid-context', 'A record JSON Schema document must be a JSON object.');
|
|
139
|
+
}
|
|
140
|
+
return (0, canonical_json_1.normalizeRedboxCanonicalJsonV1)(normalizeSchema(jsonValue));
|
|
141
|
+
}
|
|
142
|
+
function withoutIdentifier(document) {
|
|
143
|
+
return Object.fromEntries(Object.entries(document).filter(([key]) => key !== '$id'));
|
|
144
|
+
}
|
|
145
|
+
function contextSegment(document, key) {
|
|
146
|
+
const context = document['x-redbox-context'];
|
|
147
|
+
const value = context?.[key];
|
|
148
|
+
if (typeof value !== 'string' || value.length === 0) {
|
|
149
|
+
throw new RecordJsonSchemaIdentityError('invalid-context', `The record JSON Schema context must contain a non-empty ${key}.`);
|
|
150
|
+
}
|
|
151
|
+
if (value === '.' || value === '..') {
|
|
152
|
+
throw new RecordJsonSchemaIdentityError('invalid-context', `The record JSON Schema context ${key} must not be a relative-path segment.`);
|
|
153
|
+
}
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
function immutableSchemaId(document, digest) {
|
|
157
|
+
let brand;
|
|
158
|
+
let portal;
|
|
159
|
+
try {
|
|
160
|
+
brand = encodeURIComponent(contextSegment(document, 'brand'));
|
|
161
|
+
portal = encodeURIComponent(contextSegment(document, 'portal'));
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
if (error instanceof RecordJsonSchemaIdentityError) {
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
throw new RecordJsonSchemaIdentityError('invalid-context', 'The record JSON Schema brand and portal must be valid Unicode route segments.');
|
|
168
|
+
}
|
|
169
|
+
return `/${brand}/${portal}/api/records/schemas/${digest}`;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Compute whole-document identity, excluding the protected root `$id`, then
|
|
173
|
+
* inject the digest-addressed origin-relative identifier and size the final
|
|
174
|
+
* Redbox Canonical JSON v1 representation.
|
|
175
|
+
*/
|
|
176
|
+
function identifyRecordJsonSchema(document, maxDocumentBytes) {
|
|
177
|
+
assertPositiveInteger(maxDocumentBytes, 'maxDocumentBytes');
|
|
178
|
+
const normalized = normalizeRecordJsonSchemaDocument(document);
|
|
179
|
+
const identityDocument = withoutIdentifier(normalized);
|
|
180
|
+
const identityCanonicalJson = (0, canonical_json_1.serializeRedboxCanonicalJsonV1)(identityDocument);
|
|
181
|
+
const digest = (0, crypto_1.createHash)('sha256').update(identityCanonicalJson, 'utf8').digest('hex');
|
|
182
|
+
if (!DIGEST_PATTERN.test(digest)) {
|
|
183
|
+
throw new Error('SHA-256 returned a non-canonical record schema digest.');
|
|
184
|
+
}
|
|
185
|
+
const published = normalizeRecordJsonSchemaDocument({
|
|
186
|
+
...identityDocument,
|
|
187
|
+
$id: immutableSchemaId(normalized, digest),
|
|
188
|
+
});
|
|
189
|
+
const canonicalJson = (0, canonical_json_1.serializeRedboxCanonicalJsonV1)(published);
|
|
190
|
+
const byteLength = Buffer.byteLength(canonicalJson, 'utf8');
|
|
191
|
+
if (byteLength > maxDocumentBytes) {
|
|
192
|
+
throw new RecordJsonSchemaDocumentLimitError(byteLength, maxDocumentBytes);
|
|
193
|
+
}
|
|
194
|
+
return Object.freeze({
|
|
195
|
+
digest,
|
|
196
|
+
document: published,
|
|
197
|
+
canonicalJson,
|
|
198
|
+
byteLength,
|
|
199
|
+
etag: `"sha256:${digest}"`,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
function annotationKeywords(document) {
|
|
203
|
+
const keywords = new Set(exports.RECORD_JSON_SCHEMA_ANNOTATION_KEYWORDS);
|
|
204
|
+
const pending = [document];
|
|
205
|
+
while (pending.length > 0) {
|
|
206
|
+
const current = pending.pop();
|
|
207
|
+
if (!isJsonObject(current)) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
for (const [key, child] of Object.entries(current)) {
|
|
211
|
+
if (CONTRIBUTOR_ANNOTATION_KEY.test(key)) {
|
|
212
|
+
keywords.add(key);
|
|
213
|
+
}
|
|
214
|
+
if (SCHEMA_MAP_KEYWORDS.has(key) && isJsonObject(child)) {
|
|
215
|
+
for (const schema of Object.values(child)) {
|
|
216
|
+
if (isJsonObject(schema)) {
|
|
217
|
+
pending.push(schema);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (SCHEMA_OBJECT_KEYWORDS.has(key) && isJsonObject(child)) {
|
|
222
|
+
pending.push(child);
|
|
223
|
+
}
|
|
224
|
+
else if (SCHEMA_ARRAY_KEYWORDS.has(key) && Array.isArray(child)) {
|
|
225
|
+
for (const schema of child) {
|
|
226
|
+
if (isJsonObject(schema)) {
|
|
227
|
+
pending.push(schema);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return [...keywords].sort(compareLexicographically);
|
|
234
|
+
}
|
|
235
|
+
function wrappedValidator(validate, maxValidationErrors) {
|
|
236
|
+
const noIssues = Object.freeze([]);
|
|
237
|
+
const validResult = Object.freeze({
|
|
238
|
+
valid: true,
|
|
239
|
+
issues: noIssues,
|
|
240
|
+
truncated: false,
|
|
241
|
+
});
|
|
242
|
+
return Object.freeze({
|
|
243
|
+
validate: (input) => {
|
|
244
|
+
if (validate(input)) {
|
|
245
|
+
return validResult;
|
|
246
|
+
}
|
|
247
|
+
const mapping = (0, ajv_error_mapper_1.mapAjvErrorsToRecordSchemaProblems)(validate.errors, maxValidationErrors);
|
|
248
|
+
return Object.freeze({
|
|
249
|
+
valid: false,
|
|
250
|
+
issues: mapping.problems,
|
|
251
|
+
truncated: mapping.truncated,
|
|
252
|
+
});
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/** Canonical identity plus a non-mutating AJV 2020 validator for the exact published document. */
|
|
257
|
+
class RecordJsonSchemaArtifactCompiler {
|
|
258
|
+
options;
|
|
259
|
+
ajv;
|
|
260
|
+
registeredKeywords = new Set();
|
|
261
|
+
constructor(options) {
|
|
262
|
+
this.options = options;
|
|
263
|
+
assertPositiveInteger(options.maxDocumentBytes, 'maxDocumentBytes');
|
|
264
|
+
assertPositiveInteger(options.maxValidationErrors, 'maxValidationErrors');
|
|
265
|
+
this.ajv = new _2020_1.default({
|
|
266
|
+
addUsedSchema: false,
|
|
267
|
+
allErrors: true,
|
|
268
|
+
coerceTypes: false,
|
|
269
|
+
removeAdditional: false,
|
|
270
|
+
strict: true,
|
|
271
|
+
strictTypes: false,
|
|
272
|
+
useDefaults: false,
|
|
273
|
+
validateSchema: true,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
compile(document) {
|
|
277
|
+
const identity = identifyRecordJsonSchema(document, this.options.maxDocumentBytes);
|
|
278
|
+
this.registerAnnotations(identity.document);
|
|
279
|
+
if (!this.ajv.validateSchema(identity.document)) {
|
|
280
|
+
const mapping = (0, ajv_error_mapper_1.mapAjvErrorsToRecordSchemaProblems)(this.ajv.errors, this.options.maxValidationErrors);
|
|
281
|
+
throw new RecordJsonSchemaCompilationError('metaschema', mapping.problems, mapping.truncated);
|
|
282
|
+
}
|
|
283
|
+
let validate;
|
|
284
|
+
try {
|
|
285
|
+
validate = this.ajv.compile(identity.document);
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
throw new RecordJsonSchemaCompilationError('compile', Object.freeze([]));
|
|
289
|
+
}
|
|
290
|
+
return Object.freeze({
|
|
291
|
+
...identity,
|
|
292
|
+
validator: wrappedValidator(validate, this.options.maxValidationErrors),
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
registerAnnotations(document) {
|
|
296
|
+
for (const keyword of annotationKeywords(document)) {
|
|
297
|
+
if (this.registeredKeywords.has(keyword)) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
this.ajv.addKeyword({ keyword, errors: false, valid: true });
|
|
301
|
+
this.registeredKeywords.add(keyword);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
exports.RecordJsonSchemaArtifactCompiler = RecordJsonSchemaArtifactCompiler;
|
|
306
|
+
function compileRecordJsonSchemaArtifact(document, options) {
|
|
307
|
+
return new RecordJsonSchemaArtifactCompiler(options).compile(document);
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLWpzb24tc2NoZW1hLWFydGlmYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlY29yZC1jb250cmFjdC9yZWNvcmQtanNvbi1zY2hlbWEtYXJ0aWZhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBOExBLDhFQU1DO0FBK0NELDREQThCQztBQStHRCwwRUFLQztBQXJZRCxtQ0FBb0M7QUFDcEMsMERBQXFHO0FBRXJHLHlEQUE0RztBQUM1RyxtQ0FBc0Q7QUFDdEQscURBQWtHO0FBSWxHLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sMEJBQTBCLEdBQUcsc0VBQXNFLENBQUM7QUFDMUcsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzdELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvRSxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFMUQsNkVBQTZFO0FBQ2hFLFFBQUEsc0NBQXNDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsRSx1QkFBdUI7SUFDdkIsa0JBQWtCO0lBQ2xCLDBCQUEwQjtJQUMxQixzQkFBc0I7SUFDdEIsZ0NBQWdDO0lBQ2hDLHFCQUFxQjtDQUNiLENBQUMsQ0FBQztBQWtCWixNQUFhLDZCQUE4QixTQUFRLEtBQUs7SUFFcEM7SUFEbEIsWUFDa0IsTUFBMkMsRUFDM0QsT0FBZTtRQUVmLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLFdBQU0sR0FBTixNQUFNLENBQXFDO1FBSTNELElBQUksQ0FBQyxJQUFJLEdBQUcsK0JBQStCLENBQUM7SUFDOUMs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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RecordJsonSchemaEtag } from './record-json-schema-artifact';
|
|
2
|
+
export type RecordJsonSchemaEtagParseFailureReason = 'malformed' | 'weak' | 'list' | 'wildcard';
|
|
3
|
+
export type ParseRecordJsonSchemaEtagResult = {
|
|
4
|
+
readonly kind: 'absent';
|
|
5
|
+
} | {
|
|
6
|
+
readonly kind: 'parsed';
|
|
7
|
+
readonly digest: string;
|
|
8
|
+
readonly etag: RecordJsonSchemaEtag;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'invalid';
|
|
11
|
+
readonly reason: RecordJsonSchemaEtagParseFailureReason;
|
|
12
|
+
};
|
|
13
|
+
/** Parse one optional If-Match or If-None-Match value in the supported schema ETag subset. */
|
|
14
|
+
export declare function parseRecordJsonSchemaEtag(value: string | undefined): ParseRecordJsonSchemaEtagResult;
|
|
15
|
+
//# sourceMappingURL=record-json-schema-etag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-json-schema-etag.d.ts","sourceRoot":"","sources":["../../src/record-contract/record-json-schema-etag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,MAAM,MAAM,sCAAsC,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAEhG,MAAM,MAAM,+BAA+B,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;CACrC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,sCAAsC,CAAC;CACzD,CAAC;AAgBN,8FAA8F;AAC9F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,+BAA+B,CAyBpG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseRecordJsonSchemaEtag = parseRecordJsonSchemaEtag;
|
|
4
|
+
const RECORD_JSON_SCHEMA_ETAG_PATTERN = /^"sha256:([0-9a-f]{64})"$/;
|
|
5
|
+
function trimHttpOptionalWhitespace(value) {
|
|
6
|
+
let startIndex = 0;
|
|
7
|
+
let endIndex = value.length;
|
|
8
|
+
while (startIndex < endIndex && (value[startIndex] === ' ' || value[startIndex] === '\t')) {
|
|
9
|
+
startIndex += 1;
|
|
10
|
+
}
|
|
11
|
+
while (endIndex > startIndex && (value[endIndex - 1] === ' ' || value[endIndex - 1] === '\t')) {
|
|
12
|
+
endIndex -= 1;
|
|
13
|
+
}
|
|
14
|
+
return value.slice(startIndex, endIndex);
|
|
15
|
+
}
|
|
16
|
+
/** Parse one optional If-Match or If-None-Match value in the supported schema ETag subset. */
|
|
17
|
+
function parseRecordJsonSchemaEtag(value) {
|
|
18
|
+
if (value === undefined) {
|
|
19
|
+
return Object.freeze({ kind: 'absent' });
|
|
20
|
+
}
|
|
21
|
+
const valueWithoutOuterWhitespace = trimHttpOptionalWhitespace(value);
|
|
22
|
+
if (valueWithoutOuterWhitespace === '*') {
|
|
23
|
+
return Object.freeze({ kind: 'invalid', reason: 'wildcard' });
|
|
24
|
+
}
|
|
25
|
+
if (valueWithoutOuterWhitespace.includes(',')) {
|
|
26
|
+
return Object.freeze({ kind: 'invalid', reason: 'list' });
|
|
27
|
+
}
|
|
28
|
+
if (valueWithoutOuterWhitespace.startsWith('W/')) {
|
|
29
|
+
return Object.freeze({ kind: 'invalid', reason: 'weak' });
|
|
30
|
+
}
|
|
31
|
+
const match = RECORD_JSON_SCHEMA_ETAG_PATTERN.exec(valueWithoutOuterWhitespace);
|
|
32
|
+
if (!match) {
|
|
33
|
+
return Object.freeze({ kind: 'invalid', reason: 'malformed' });
|
|
34
|
+
}
|
|
35
|
+
return Object.freeze({
|
|
36
|
+
kind: 'parsed',
|
|
37
|
+
digest: match[1],
|
|
38
|
+
etag: valueWithoutOuterWhitespace,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLWpzb24tc2NoZW1hLWV0YWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVjb3JkLWNvbnRyYWN0L3JlY29yZC1qc29uLXNjaGVtYS1ldGFnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUNBLDhEQXlCQztBQXhERCxNQUFNLCtCQUErQixHQUFHLDJCQUEyQixDQUFDO0FBZ0JwRSxTQUFTLDBCQUEwQixDQUFDLEtBQWE7SUFDL0MsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFFNUIsT0FBTyxVQUFVLEdBQUcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxRixVQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLFFBQVEsR0FBRyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUYsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsOEZBQThGO0FBQzlGLFNBQWdCLHlCQUF5QixDQUFDLEtBQXlCO0lBQ2pFLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxNQUFNLDJCQUEyQixHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLElBQUksMkJBQTJCLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDeEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsSUFBSSwyQkFBMkIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxJQUFJLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLCtCQUErQixDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2hGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQixJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksRUFBRSwyQkFBbUQ7S0FDMUQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
|