@researchdatabox/redbox-core 5.0.4 → 5.1.0-beta.12573

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.
Files changed (548) hide show
  1. package/dist/AttachmentStagingIdentity.d.ts +3 -0
  2. package/dist/AttachmentStagingIdentity.d.ts.map +1 -0
  3. package/dist/AttachmentStagingIdentity.js +10 -0
  4. package/dist/CoreController.d.ts +7 -3
  5. package/dist/CoreController.d.ts.map +1 -1
  6. package/dist/CoreController.js +85 -3
  7. package/dist/DatastreamService.d.ts +5 -1
  8. package/dist/DatastreamService.d.ts.map +1 -1
  9. package/dist/HarvestRunService.d.ts +4 -3
  10. package/dist/HarvestRunService.d.ts.map +1 -1
  11. package/dist/HarvestRunService.js +1 -1
  12. package/dist/RecordConcurrencyObservability.d.ts +51 -0
  13. package/dist/RecordConcurrencyObservability.d.ts.map +1 -0
  14. package/dist/RecordConcurrencyObservability.js +136 -0
  15. package/dist/RecordEntityTag.d.ts +31 -0
  16. package/dist/RecordEntityTag.d.ts.map +1 -0
  17. package/dist/RecordEntityTag.js +101 -0
  18. package/dist/RecordFormFingerprint.d.ts +7 -0
  19. package/dist/RecordFormFingerprint.d.ts.map +1 -0
  20. package/dist/RecordFormFingerprint.js +106 -0
  21. package/dist/RecordHttpConcurrency.d.ts +60 -0
  22. package/dist/RecordHttpConcurrency.d.ts.map +1 -0
  23. package/dist/RecordHttpConcurrency.js +181 -0
  24. package/dist/RecordSaveResponse.d.ts +219 -0
  25. package/dist/RecordSaveResponse.d.ts.map +1 -0
  26. package/dist/RecordSaveResponse.js +639 -0
  27. package/dist/RecordStorageConcurrency.d.ts +49 -0
  28. package/dist/RecordStorageConcurrency.d.ts.map +1 -0
  29. package/dist/RecordStorageConcurrency.js +103 -0
  30. package/dist/RecordWriteClassification.d.ts +12 -0
  31. package/dist/RecordWriteClassification.d.ts.map +1 -0
  32. package/dist/RecordWriteClassification.js +70 -0
  33. package/dist/RecordsService.d.ts +109 -13
  34. package/dist/RecordsService.d.ts.map +1 -1
  35. package/dist/RecordsService.js +44 -1
  36. package/dist/SearchService.d.ts +2 -1
  37. package/dist/SearchService.d.ts.map +1 -1
  38. package/dist/StorageService.d.ts +49 -9
  39. package/dist/StorageService.d.ts.map +1 -1
  40. package/dist/StorageService.js +19 -1
  41. package/dist/StorageServiceResponse.d.ts +22 -1
  42. package/dist/StorageServiceResponse.d.ts.map +1 -1
  43. package/dist/StorageServiceResponse.js +22 -4
  44. package/dist/action-execution/audit.d.ts +41 -0
  45. package/dist/action-execution/audit.d.ts.map +1 -0
  46. package/dist/action-execution/audit.js +122 -0
  47. package/dist/action-execution/executor.d.ts +24 -0
  48. package/dist/action-execution/executor.d.ts.map +1 -0
  49. package/dist/action-execution/executor.js +435 -0
  50. package/dist/action-execution/failure.d.ts +49 -0
  51. package/dist/action-execution/failure.d.ts.map +1 -0
  52. package/dist/action-execution/failure.js +129 -0
  53. package/dist/action-execution/index.d.ts +7 -0
  54. package/dist/action-execution/index.d.ts.map +1 -0
  55. package/dist/action-execution/index.js +23 -0
  56. package/dist/action-execution/legacy-result.d.ts +21 -0
  57. package/dist/action-execution/legacy-result.d.ts.map +1 -0
  58. package/dist/action-execution/legacy-result.js +70 -0
  59. package/dist/action-execution/policy.d.ts +12 -0
  60. package/dist/action-execution/policy.d.ts.map +1 -0
  61. package/dist/action-execution/policy.js +138 -0
  62. package/dist/action-execution/types.d.ts +121 -0
  63. package/dist/action-execution/types.d.ts.map +1 -0
  64. package/dist/action-execution/types.js +22 -0
  65. package/dist/api-routes/groups/branding.d.ts +8 -0
  66. package/dist/api-routes/groups/branding.d.ts.map +1 -1
  67. package/dist/api-routes/groups/branding.js +86 -11
  68. package/dist/api-routes/groups/dashboard-config.d.ts +12 -9
  69. package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -1
  70. package/dist/api-routes/groups/dashboard-config.js +136 -73
  71. package/dist/api-routes/groups/forms.d.ts.map +1 -1
  72. package/dist/api-routes/groups/forms.js +10 -2
  73. package/dist/api-routes/groups/record-schemas.d.ts +5 -0
  74. package/dist/api-routes/groups/record-schemas.d.ts.map +1 -0
  75. package/dist/api-routes/groups/record-schemas.js +181 -0
  76. package/dist/api-routes/groups/records.d.ts +1 -0
  77. package/dist/api-routes/groups/records.d.ts.map +1 -1
  78. package/dist/api-routes/groups/records.js +141 -26
  79. package/dist/api-routes/index.d.ts +3 -0
  80. package/dist/api-routes/index.d.ts.map +1 -1
  81. package/dist/api-routes/index.js +4 -1
  82. package/dist/api-routes/openapi.d.ts.map +1 -1
  83. package/dist/api-routes/openapi.js +7 -5
  84. package/dist/api-routes/record-schema-openapi.d.ts +26 -0
  85. package/dist/api-routes/record-schema-openapi.d.ts.map +1 -0
  86. package/dist/api-routes/record-schema-openapi.js +38 -0
  87. package/dist/api-routes/record-schema-response.d.ts +40 -0
  88. package/dist/api-routes/record-schema-response.d.ts.map +1 -0
  89. package/dist/api-routes/record-schema-response.js +89 -0
  90. package/dist/api-routes/request-extraction.d.ts.map +1 -1
  91. package/dist/api-routes/request-extraction.js +10 -8
  92. package/dist/api-routes/route-factory.d.ts.map +1 -1
  93. package/dist/api-routes/route-factory.js +2 -1
  94. package/dist/api-routes/route-registry.d.ts.map +1 -1
  95. package/dist/api-routes/route-registry.js +3 -1
  96. package/dist/api-routes/schemas/common.d.ts +36 -0
  97. package/dist/api-routes/schemas/common.d.ts.map +1 -1
  98. package/dist/api-routes/schemas/common.js +95 -5
  99. package/dist/api-routes/schemas/responses.d.ts +1424 -1
  100. package/dist/api-routes/schemas/responses.d.ts.map +1 -1
  101. package/dist/api-routes/schemas/responses.js +382 -60
  102. package/dist/api-routes/types.d.ts +1 -0
  103. package/dist/api-routes/types.d.ts.map +1 -1
  104. package/dist/api-routes/validation.d.ts +5 -1
  105. package/dist/api-routes/validation.d.ts.map +1 -1
  106. package/dist/api-routes/validation.js +14 -15
  107. package/dist/bootstrap.d.ts +3 -1
  108. package/dist/bootstrap.d.ts.map +1 -1
  109. package/dist/bootstrap.js +58 -41
  110. package/dist/config/agendaQueue.config.d.ts +3 -0
  111. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  112. package/dist/config/agendaQueue.config.js +29 -2
  113. package/dist/config/branding.config.d.ts +13 -0
  114. package/dist/config/branding.config.d.ts.map +1 -1
  115. package/dist/config/branding.config.js +34 -2
  116. package/dist/config/brandingConfigurationDefaults.config.d.ts +4 -0
  117. package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
  118. package/dist/config/brandingConfigurationDefaults.config.js +42 -3
  119. package/dist/config/index.d.ts +12 -4
  120. package/dist/config/index.d.ts.map +1 -1
  121. package/dist/config/index.js +7 -4
  122. package/dist/config/policies.config.d.ts.map +1 -1
  123. package/dist/config/policies.config.js +37 -23
  124. package/dist/config/raid.config.d.ts +7 -4
  125. package/dist/config/raid.config.d.ts.map +1 -1
  126. package/dist/config/raid.config.js +21 -35
  127. package/dist/config/record.config.d.ts +3 -0
  128. package/dist/config/record.config.d.ts.map +1 -1
  129. package/dist/config/record.config.js +37 -35
  130. package/dist/config/recordSchema.config.d.ts +68 -0
  131. package/dist/config/recordSchema.config.d.ts.map +1 -0
  132. package/dist/config/recordSchema.config.js +173 -0
  133. package/dist/config/recordValidation.config.d.ts +19 -0
  134. package/dist/config/recordValidation.config.d.ts.map +1 -0
  135. package/dist/config/recordValidation.config.js +10 -0
  136. package/dist/config/recordtype.config.d.ts +32 -9
  137. package/dist/config/recordtype.config.d.ts.map +1 -1
  138. package/dist/config/recordtype.config.js +4 -7
  139. package/dist/config/routes.config.d.ts.map +1 -1
  140. package/dist/config/routes.config.js +135 -53
  141. package/dist/config/workflow.config.d.ts +6 -0
  142. package/dist/config/workflow.config.d.ts.map +1 -1
  143. package/dist/config/workflow.config.js +1 -1
  144. package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
  145. package/dist/configmodels/AdminSidebarConfig.js +4 -2
  146. package/dist/configmodels/ConfigModels.d.ts +1 -1
  147. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  148. package/dist/configmodels/ConfigModels.js +26 -9
  149. package/dist/configmodels/DashboardFieldCatalogue.d.ts +67 -0
  150. package/dist/configmodels/DashboardFieldCatalogue.d.ts.map +1 -0
  151. package/dist/configmodels/DashboardFieldCatalogue.js +174 -0
  152. package/dist/configmodels/DashboardSettings.d.ts +191 -0
  153. package/dist/configmodels/DashboardSettings.d.ts.map +1 -0
  154. package/dist/configmodels/DashboardSettings.js +705 -0
  155. package/dist/configmodels/FigsharePublishing.d.ts +1 -1
  156. package/dist/configmodels/OniPublishing.d.ts +205 -0
  157. package/dist/configmodels/OniPublishing.d.ts.map +1 -0
  158. package/dist/configmodels/OniPublishing.js +335 -0
  159. package/dist/configmodels/RaidPublishing.d.ts +97 -0
  160. package/dist/configmodels/RaidPublishing.d.ts.map +1 -0
  161. package/dist/configmodels/RaidPublishing.js +35 -0
  162. package/dist/configmodels/WebAnalytics.d.ts +55 -0
  163. package/dist/configmodels/WebAnalytics.d.ts.map +1 -0
  164. package/dist/configmodels/WebAnalytics.js +61 -0
  165. package/dist/controllers/AppConfigController.d.ts.map +1 -1
  166. package/dist/controllers/AppConfigController.js +4 -1
  167. package/dist/controllers/BrandingAppController.d.ts +29 -7
  168. package/dist/controllers/BrandingAppController.d.ts.map +1 -1
  169. package/dist/controllers/BrandingAppController.js +265 -69
  170. package/dist/controllers/BrandingController.d.ts +24 -1
  171. package/dist/controllers/BrandingController.d.ts.map +1 -1
  172. package/dist/controllers/BrandingController.js +173 -43
  173. package/dist/controllers/BrandingControllerSupport.d.ts +20 -0
  174. package/dist/controllers/BrandingControllerSupport.d.ts.map +1 -0
  175. package/dist/controllers/BrandingControllerSupport.js +80 -0
  176. package/dist/controllers/DashboardConfigController.d.ts +6 -2
  177. package/dist/controllers/DashboardConfigController.d.ts.map +1 -1
  178. package/dist/controllers/DashboardConfigController.js +18 -4
  179. package/dist/controllers/DynamicAssetController.d.ts +7 -5
  180. package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
  181. package/dist/controllers/DynamicAssetController.js +21 -12
  182. package/dist/controllers/RecordController.d.ts +45 -4
  183. package/dist/controllers/RecordController.d.ts.map +1 -1
  184. package/dist/controllers/RecordController.js +778 -345
  185. package/dist/controllers/index.d.ts.map +1 -1
  186. package/dist/controllers/index.js +4 -1
  187. package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
  188. package/dist/controllers/webservice/AdminController.js +4 -3
  189. package/dist/controllers/webservice/BrandingController.d.ts +26 -1
  190. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  191. package/dist/controllers/webservice/BrandingController.js +292 -116
  192. package/dist/controllers/webservice/DashboardConfigController.d.ts +25 -17
  193. package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -1
  194. package/dist/controllers/webservice/DashboardConfigController.js +90 -205
  195. package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
  196. package/dist/controllers/webservice/FormManagementController.js +37 -3
  197. package/dist/controllers/webservice/RecordController.d.ts +15 -1
  198. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  199. package/dist/controllers/webservice/RecordController.js +647 -267
  200. package/dist/controllers/webservice/RecordSchemaController.d.ts +32 -0
  201. package/dist/controllers/webservice/RecordSchemaController.d.ts.map +1 -0
  202. package/dist/controllers/webservice/RecordSchemaController.js +356 -0
  203. package/dist/controllers/webservice/RecordTypeController.d.ts +6 -1
  204. package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
  205. package/dist/controllers/webservice/RecordTypeController.js +21 -3
  206. package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
  207. package/dist/controllers/webservice/SearchController.js +7 -3
  208. package/dist/hooks/defineRedboxHook.d.ts +3 -0
  209. package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
  210. package/dist/hooks/defineRedboxHook.js +4 -1
  211. package/dist/index.d.ts +50 -23
  212. package/dist/index.d.ts.map +1 -1
  213. package/dist/index.js +90 -2
  214. package/dist/loader/bootstrapShimRuntime.d.ts +1 -1
  215. package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
  216. package/dist/loader/bootstrapShimRuntime.js +20 -12
  217. package/dist/loader/index.d.ts +9 -0
  218. package/dist/loader/index.d.ts.map +1 -1
  219. package/dist/loader/index.js +93 -4
  220. package/dist/model/BrandingTypeface.d.ts +70 -0
  221. package/dist/model/BrandingTypeface.d.ts.map +1 -0
  222. package/dist/model/BrandingTypeface.js +116 -0
  223. package/dist/model/BuildResponse.d.ts +25 -11
  224. package/dist/model/BuildResponse.d.ts.map +1 -1
  225. package/dist/model/BuildResponse.js +4 -3
  226. package/dist/model/DashboardTypeResponseModel.d.ts +6 -0
  227. package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
  228. package/dist/model/DashboardTypeResponseModel.js +7 -1
  229. package/dist/model/DashboardViewResponseModel.d.ts +5 -1
  230. package/dist/model/DashboardViewResponseModel.d.ts.map +1 -1
  231. package/dist/model/DashboardViewResponseModel.js +6 -3
  232. package/dist/model/RBValidationError.d.ts +17 -0
  233. package/dist/model/RBValidationError.d.ts.map +1 -1
  234. package/dist/model/RBValidationError.js +37 -1
  235. package/dist/model/RecordTypeResponseModel.d.ts +12 -4
  236. package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
  237. package/dist/model/RecordTypeResponseModel.js +11 -2
  238. package/dist/model/index.d.ts +5 -1
  239. package/dist/model/index.d.ts.map +1 -1
  240. package/dist/model/index.js +5 -2
  241. package/dist/model/record-contract.d.ts +42 -0
  242. package/dist/model/record-contract.d.ts.map +1 -0
  243. package/dist/model/record-contract.js +3 -0
  244. package/dist/model/storage/BrandingModel.d.ts +7 -0
  245. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  246. package/dist/model/storage/BrandingModel.js +7 -1
  247. package/dist/model/storage/DeletedRecordModel.d.ts +35 -0
  248. package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -1
  249. package/dist/model/storage/DeletedRecordModel.js +62 -1
  250. package/dist/model/storage/IntegrationAuditModel.d.ts +16 -2
  251. package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
  252. package/dist/model/storage/IntegrationAuditModel.js +15 -1
  253. package/dist/model/storage/RecordAuditModel.d.ts +11 -1
  254. package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
  255. package/dist/model/storage/RecordAuditModel.js +8 -2
  256. package/dist/model/storage/RecordModel.d.ts +8 -2
  257. package/dist/model/storage/RecordModel.d.ts.map +1 -1
  258. package/dist/model/storage/RecordTypeModel.d.ts +6 -0
  259. package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
  260. package/dist/model/storage/RecordTypeModel.js +4 -1
  261. package/dist/model/storage/index.d.ts +12 -10
  262. package/dist/model/storage/index.d.ts.map +1 -1
  263. package/dist/model/storage/index.js +24 -2
  264. package/dist/model/storage/record-schema.d.ts +115 -0
  265. package/dist/model/storage/record-schema.d.ts.map +1 -0
  266. package/dist/model/storage/record-schema.js +3 -0
  267. package/dist/policies/checkAuth.d.ts +2 -6
  268. package/dist/policies/checkAuth.d.ts.map +1 -1
  269. package/dist/policies/checkAuth.js +32 -9
  270. package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
  271. package/dist/policies/contentSecurityPolicy.js +85 -2
  272. package/dist/policies/index.d.ts +3 -2
  273. package/dist/policies/index.d.ts.map +1 -1
  274. package/dist/policies/index.js +4 -2
  275. package/dist/policies/validateApiContractRequest.d.ts.map +1 -1
  276. package/dist/policies/validateApiContractRequest.js +49 -11
  277. package/dist/record-contract/ajv-error-mapper.d.ts +34 -0
  278. package/dist/record-contract/ajv-error-mapper.d.ts.map +1 -0
  279. package/dist/record-contract/ajv-error-mapper.js +153 -0
  280. package/dist/record-contract/canonical-json.d.ts +20 -0
  281. package/dist/record-contract/canonical-json.d.ts.map +1 -0
  282. package/dist/record-contract/canonical-json.js +126 -0
  283. package/dist/record-contract/codes.d.ts +36 -0
  284. package/dist/record-contract/codes.d.ts.map +1 -0
  285. package/dist/record-contract/codes.js +38 -0
  286. package/dist/record-contract/contributor-registry.d.ts +76 -0
  287. package/dist/record-contract/contributor-registry.d.ts.map +1 -0
  288. package/dist/record-contract/contributor-registry.js +126 -0
  289. package/dist/record-contract/core-contributors.d.ts +44 -0
  290. package/dist/record-contract/core-contributors.d.ts.map +1 -0
  291. package/dist/record-contract/core-contributors.js +395 -0
  292. package/dist/record-contract/deep-freeze.d.ts +3 -0
  293. package/dist/record-contract/deep-freeze.d.ts.map +1 -0
  294. package/dist/record-contract/deep-freeze.js +23 -0
  295. package/dist/record-contract/index.d.ts +13 -0
  296. package/dist/record-contract/index.d.ts.map +1 -0
  297. package/dist/record-contract/index.js +29 -0
  298. package/dist/record-contract/json-pointer.d.ts +20 -0
  299. package/dist/record-contract/json-pointer.d.ts.map +1 -0
  300. package/dist/record-contract/json-pointer.js +70 -0
  301. package/dist/record-contract/json-schema-renderer.d.ts +51 -0
  302. package/dist/record-contract/json-schema-renderer.d.ts.map +1 -0
  303. package/dist/record-contract/json-schema-renderer.js +450 -0
  304. package/dist/record-contract/record-contract-compiler.d.ts +42 -0
  305. package/dist/record-contract/record-contract-compiler.d.ts.map +1 -0
  306. package/dist/record-contract/record-contract-compiler.js +775 -0
  307. package/dist/record-contract/record-contract-context.d.ts +91 -0
  308. package/dist/record-contract/record-contract-context.d.ts.map +1 -0
  309. package/dist/record-contract/record-contract-context.js +39 -0
  310. package/dist/record-contract/record-json-schema-artifact.d.ts +74 -0
  311. package/dist/record-contract/record-json-schema-artifact.d.ts.map +1 -0
  312. package/dist/record-contract/record-json-schema-artifact.js +309 -0
  313. package/dist/record-contract/record-json-schema-etag.d.ts +15 -0
  314. package/dist/record-contract/record-json-schema-etag.d.ts.map +1 -0
  315. package/dist/record-contract/record-json-schema-etag.js +41 -0
  316. package/dist/record-contract/types.d.ts +151 -0
  317. package/dist/record-contract/types.d.ts.map +1 -0
  318. package/dist/record-contract/types.js +6 -0
  319. package/dist/services/AppConfigService.d.ts +6 -0
  320. package/dist/services/AppConfigService.d.ts.map +1 -1
  321. package/dist/services/AppConfigService.js +23 -1
  322. package/dist/services/AttachmentMetadataService.d.ts +58 -0
  323. package/dist/services/AttachmentMetadataService.d.ts.map +1 -1
  324. package/dist/services/AttachmentMetadataService.js +643 -8
  325. package/dist/services/BrandingLogoService.d.ts +6 -1
  326. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  327. package/dist/services/BrandingLogoService.js +77 -9
  328. package/dist/services/BrandingService.d.ts +171 -9
  329. package/dist/services/BrandingService.d.ts.map +1 -1
  330. package/dist/services/BrandingService.js +572 -68
  331. package/dist/services/BrandingThemeCssService.d.ts +17 -1
  332. package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
  333. package/dist/services/BrandingThemeCssService.js +71 -9
  334. package/dist/services/BrandingTypefaceService.d.ts +74 -0
  335. package/dist/services/BrandingTypefaceService.d.ts.map +1 -0
  336. package/dist/services/BrandingTypefaceService.js +359 -0
  337. package/dist/services/BrandingWoff2Inspector.d.ts +17 -0
  338. package/dist/services/BrandingWoff2Inspector.d.ts.map +1 -0
  339. package/dist/services/BrandingWoff2Inspector.js +402 -0
  340. package/dist/services/DashboardConfigService.d.ts +214 -54
  341. package/dist/services/DashboardConfigService.d.ts.map +1 -1
  342. package/dist/services/DashboardConfigService.js +829 -261
  343. package/dist/services/DashboardLegacyConversion.d.ts +82 -0
  344. package/dist/services/DashboardLegacyConversion.d.ts.map +1 -0
  345. package/dist/services/DashboardLegacyConversion.js +427 -0
  346. package/dist/services/DashboardTypesService.d.ts +15 -4
  347. package/dist/services/DashboardTypesService.d.ts.map +1 -1
  348. package/dist/services/DashboardTypesService.js +72 -139
  349. package/dist/services/DoiService.d.ts +1 -1
  350. package/dist/services/DoiService.d.ts.map +1 -1
  351. package/dist/services/DoiService.js +71 -45
  352. package/dist/services/FigshareService.d.ts.map +1 -1
  353. package/dist/services/FigshareService.js +8 -7
  354. package/dist/services/FormRecordConsistencyService.d.ts +8 -23
  355. package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
  356. package/dist/services/FormRecordConsistencyService.js +54 -70
  357. package/dist/services/FormsService.d.ts +91 -2
  358. package/dist/services/FormsService.d.ts.map +1 -1
  359. package/dist/services/FormsService.js +324 -64
  360. package/dist/services/HarvestRunService.d.ts +6 -3
  361. package/dist/services/HarvestRunService.d.ts.map +1 -1
  362. package/dist/services/HarvestRunService.js +161 -97
  363. package/dist/services/I18nEntriesService.d.ts +11 -11
  364. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  365. package/dist/services/I18nEntriesService.js +71 -48
  366. package/dist/services/OniService.d.ts +19 -62
  367. package/dist/services/OniService.d.ts.map +1 -1
  368. package/dist/services/OniService.js +223 -691
  369. package/dist/services/RDMPService.d.ts +1 -1
  370. package/dist/services/RDMPService.d.ts.map +1 -1
  371. package/dist/services/RDMPService.js +5 -5
  372. package/dist/services/RaidService.d.ts +19 -61
  373. package/dist/services/RaidService.d.ts.map +1 -1
  374. package/dist/services/RaidService.js +191 -530
  375. package/dist/services/RecordSchemaService.d.ts +440 -0
  376. package/dist/services/RecordSchemaService.d.ts.map +1 -0
  377. package/dist/services/RecordSchemaService.js +3061 -0
  378. package/dist/services/RecordTypesService.d.ts +29 -0
  379. package/dist/services/RecordTypesService.d.ts.map +1 -1
  380. package/dist/services/RecordTypesService.js +106 -11
  381. package/dist/services/RecordValidationService.d.ts +340 -0
  382. package/dist/services/RecordValidationService.d.ts.map +1 -0
  383. package/dist/services/RecordValidationService.js +1898 -0
  384. package/dist/services/RecordsService.d.ts +317 -26
  385. package/dist/services/RecordsService.d.ts.map +1 -1
  386. package/dist/services/RecordsService.js +5145 -765
  387. package/dist/services/SolrSearchService.d.ts +1 -1
  388. package/dist/services/SolrSearchService.d.ts.map +1 -1
  389. package/dist/services/SolrSearchService.js +42 -12
  390. package/dist/services/StandardDatastreamService.d.ts +4 -0
  391. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  392. package/dist/services/StandardDatastreamService.js +106 -44
  393. package/dist/services/TriggerService.d.ts.map +1 -1
  394. package/dist/services/TriggerService.js +54 -30
  395. package/dist/services/UsersService.d.ts +2 -1
  396. package/dist/services/UsersService.d.ts.map +1 -1
  397. package/dist/services/UsersService.js +364 -283
  398. package/dist/services/VocabularyService.d.ts +2 -0
  399. package/dist/services/VocabularyService.d.ts.map +1 -1
  400. package/dist/services/VocabularyService.js +61 -2
  401. package/dist/services/WorkflowStepsService.d.ts +11 -0
  402. package/dist/services/WorkflowStepsService.d.ts.map +1 -1
  403. package/dist/services/WorkflowStepsService.js +32 -3
  404. package/dist/services/WorkspaceService.d.ts +2 -2
  405. package/dist/services/WorkspaceService.d.ts.map +1 -1
  406. package/dist/services/WorkspaceService.js +5 -5
  407. package/dist/services/doi-v2/bindings.d.ts.map +1 -1
  408. package/dist/services/doi-v2/bindings.js +3 -20
  409. package/dist/services/doi-v2/config.d.ts +1 -0
  410. package/dist/services/doi-v2/config.d.ts.map +1 -1
  411. package/dist/services/doi-v2/config.js +13 -5
  412. package/dist/services/doi-v2/runtime.d.ts.map +1 -1
  413. package/dist/services/doi-v2/runtime.js +14 -54
  414. package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
  415. package/dist/services/figshare-v2/bindings.js +3 -20
  416. package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
  417. package/dist/services/figshare-v2/runtime.js +11 -58
  418. package/dist/services/figshare-v2/worker.d.ts.map +1 -1
  419. package/dist/services/figshare-v2/worker.js +254 -74
  420. package/dist/services/form-record-access-user.d.ts +3 -0
  421. package/dist/services/form-record-access-user.d.ts.map +1 -0
  422. package/dist/services/form-record-access-user.js +23 -0
  423. package/dist/services/index.d.ts +9 -0
  424. package/dist/services/index.d.ts.map +1 -1
  425. package/dist/services/index.js +45 -3
  426. package/dist/services/integration-v2/bindings.d.ts +3 -0
  427. package/dist/services/integration-v2/bindings.d.ts.map +1 -0
  428. package/dist/services/integration-v2/bindings.js +91 -0
  429. package/dist/services/integration-v2/runtime.d.ts +3 -0
  430. package/dist/services/integration-v2/runtime.d.ts.map +1 -0
  431. package/dist/services/integration-v2/runtime.js +50 -0
  432. package/dist/services/internal-record-schema-authorization.d.ts +8 -0
  433. package/dist/services/internal-record-schema-authorization.d.ts.map +1 -0
  434. package/dist/services/internal-record-schema-authorization.js +16 -0
  435. package/dist/services/oni-v2/audit.d.ts +19 -0
  436. package/dist/services/oni-v2/audit.d.ts.map +1 -0
  437. package/dist/services/oni-v2/audit.js +50 -0
  438. package/dist/services/oni-v2/bindings.d.ts +7 -0
  439. package/dist/services/oni-v2/bindings.d.ts.map +1 -0
  440. package/dist/services/oni-v2/bindings.js +31 -0
  441. package/dist/services/oni-v2/config.d.ts +12 -0
  442. package/dist/services/oni-v2/config.d.ts.map +1 -0
  443. package/dist/services/oni-v2/config.js +134 -0
  444. package/dist/services/oni-v2/context.d.ts +3 -0
  445. package/dist/services/oni-v2/context.d.ts.map +1 -0
  446. package/dist/services/oni-v2/context.js +17 -0
  447. package/dist/services/oni-v2/crate.d.ts +17 -0
  448. package/dist/services/oni-v2/crate.d.ts.map +1 -0
  449. package/dist/services/oni-v2/crate.js +504 -0
  450. package/dist/services/oni-v2/flydriveOcflStore.d.ts +69 -0
  451. package/dist/services/oni-v2/flydriveOcflStore.d.ts.map +1 -0
  452. package/dist/services/oni-v2/flydriveOcflStore.js +325 -0
  453. package/dist/services/oni-v2/ingestion.d.ts +37 -0
  454. package/dist/services/oni-v2/ingestion.d.ts.map +1 -0
  455. package/dist/services/oni-v2/ingestion.js +91 -0
  456. package/dist/services/oni-v2/mapping.d.ts +17 -0
  457. package/dist/services/oni-v2/mapping.d.ts.map +1 -0
  458. package/dist/services/oni-v2/mapping.js +137 -0
  459. package/dist/services/oni-v2/repository.d.ts +9 -0
  460. package/dist/services/oni-v2/repository.d.ts.map +1 -0
  461. package/dist/services/oni-v2/repository.js +180 -0
  462. package/dist/services/oni-v2/runtime.d.ts +23 -0
  463. package/dist/services/oni-v2/runtime.d.ts.map +1 -0
  464. package/dist/services/oni-v2/runtime.js +121 -0
  465. package/dist/services/oni-v2/templating.d.ts +11 -0
  466. package/dist/services/oni-v2/templating.d.ts.map +1 -0
  467. package/dist/services/oni-v2/templating.js +27 -0
  468. package/dist/services/oni-v2/types.d.ts +100 -0
  469. package/dist/services/oni-v2/types.d.ts.map +1 -0
  470. package/dist/services/oni-v2/types.js +3 -0
  471. package/dist/services/raid-v2/audit.d.ts +10 -0
  472. package/dist/services/raid-v2/audit.d.ts.map +1 -0
  473. package/dist/services/raid-v2/audit.js +29 -0
  474. package/dist/services/raid-v2/errors.d.ts +85 -0
  475. package/dist/services/raid-v2/errors.d.ts.map +1 -0
  476. package/dist/services/raid-v2/errors.js +36 -0
  477. package/dist/services/raid-v2/http.d.ts +4 -0
  478. package/dist/services/raid-v2/http.d.ts.map +1 -0
  479. package/dist/services/raid-v2/http.js +84 -0
  480. package/dist/services/raid-v2/logger.d.ts +8 -0
  481. package/dist/services/raid-v2/logger.d.ts.map +1 -0
  482. package/dist/services/raid-v2/logger.js +30 -0
  483. package/dist/services/raid-v2/mapping.d.ts +9 -0
  484. package/dist/services/raid-v2/mapping.d.ts.map +1 -0
  485. package/dist/services/raid-v2/mapping.js +168 -0
  486. package/dist/services/raid-v2/runtime.d.ts +5 -0
  487. package/dist/services/raid-v2/runtime.d.ts.map +1 -0
  488. package/dist/services/raid-v2/runtime.js +135 -0
  489. package/dist/services/raid-v2/tags.d.ts +11 -0
  490. package/dist/services/raid-v2/tags.d.ts.map +1 -0
  491. package/dist/services/raid-v2/tags.js +12 -0
  492. package/dist/services/raid-v2/types.d.ts +66 -0
  493. package/dist/services/raid-v2/types.d.ts.map +1 -0
  494. package/dist/services/raid-v2/types.js +3 -0
  495. package/dist/services/record-hooks/coordinator.d.ts +64 -0
  496. package/dist/services/record-hooks/coordinator.d.ts.map +1 -0
  497. package/dist/services/record-hooks/coordinator.js +276 -0
  498. package/dist/visitor/client.visitor.d.ts +6 -0
  499. package/dist/visitor/client.visitor.d.ts.map +1 -1
  500. package/dist/visitor/client.visitor.js +59 -14
  501. package/dist/visitor/construct.visitor.d.ts +27 -1
  502. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  503. package/dist/visitor/construct.visitor.js +265 -177
  504. package/dist/visitor/context-variables.visitor.d.ts +3 -1
  505. package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
  506. package/dist/visitor/context-variables.visitor.js +15 -1
  507. package/dist/visitor/data-value.visitor.d.ts +6 -0
  508. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  509. package/dist/visitor/data-value.visitor.js +10 -1
  510. package/dist/visitor/json-type-def.visitor.d.ts +6 -0
  511. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  512. package/dist/visitor/json-type-def.visitor.js +10 -1
  513. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +11 -0
  514. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  515. package/dist/visitor/migrate-config-v4-v5.visitor.js +228 -133
  516. package/dist/visitor/related-object-data-inline.visitor.d.ts +31 -0
  517. package/dist/visitor/related-object-data-inline.visitor.d.ts.map +1 -0
  518. package/dist/visitor/related-object-data-inline.visitor.js +96 -0
  519. package/dist/visitor/template.visitor.d.ts +17 -2
  520. package/dist/visitor/template.visitor.d.ts.map +1 -1
  521. package/dist/visitor/template.visitor.js +60 -22
  522. package/dist/visitor/validator.visitor.d.ts +49 -7
  523. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  524. package/dist/visitor/validator.visitor.js +275 -178
  525. package/dist/waterline-models/AttachmentMetadata.d.ts +22 -0
  526. package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -1
  527. package/dist/waterline-models/AttachmentMetadata.js +147 -3
  528. package/dist/waterline-models/BrandingConfig.d.ts +7 -0
  529. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  530. package/dist/waterline-models/BrandingConfig.js +16 -1
  531. package/dist/waterline-models/BrandingConfigHistory.d.ts +11 -2
  532. package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -1
  533. package/dist/waterline-models/BrandingConfigHistory.js +21 -1
  534. package/dist/waterline-models/DashboardConfiguration.d.ts +29 -0
  535. package/dist/waterline-models/DashboardConfiguration.d.ts.map +1 -0
  536. package/dist/waterline-models/DashboardConfiguration.js +52 -0
  537. package/dist/waterline-models/RecordType.d.ts +9 -0
  538. package/dist/waterline-models/RecordType.d.ts.map +1 -1
  539. package/dist/waterline-models/RecordType.js +16 -1
  540. package/dist/waterline-models/User.d.ts.map +1 -1
  541. package/dist/waterline-models/User.js +10 -15
  542. package/dist/waterline-models/index.d.ts +2 -0
  543. package/dist/waterline-models/index.d.ts.map +1 -1
  544. package/dist/waterline-models/index.js +4 -1
  545. package/package.json +59 -45
  546. package/dist/config/datapubs.config.d.ts +0 -72
  547. package/dist/config/datapubs.config.d.ts.map +0 -1
  548. package/dist/config/datapubs.config.js +0 -74
@@ -12,6 +12,7 @@ export declare namespace Services {
12
12
  private pruneExpiredEntries;
13
13
  private setCache;
14
14
  private getFromCache;
15
+ private scheduleSupersededFaviconCleanup;
15
16
  private isStorageNotFoundError;
16
17
  private isLegacyGridFsObjectId;
17
18
  private extForContentType;
@@ -59,7 +60,11 @@ export declare namespace Services {
59
60
  updatedAt: string;
60
61
  }>;
61
62
  getBinary(id: string): Buffer | null;
62
- getBinaryAsync(id: string): Promise<Buffer | null>;
63
+ getBinaryAsync(id: string, expectedSha256?: string): Promise<Buffer | null>;
64
+ getCurrentFaviconBinary(branding: string): Promise<{
65
+ buffer: Buffer;
66
+ favicon: Record<string, unknown>;
67
+ } | null>;
63
68
  private getLegacyGridFsBinary;
64
69
  }
65
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BrandingLogoService.d.ts","sourceRoot":"","sources":["../../src/services/BrandingLogoService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK1D;;;;GAIG;AAEH,yBAAiB,QAAQ,CAAC;IACxB,MACa,YAAa,SAAQ,YAAY,CAAC,IAAI,CAAC,OAAO;QACzD,iEAAiE;QACjE,OAAO,CAAC,WAAW,CAA4D;QAE/E,OAAO,CAAC,aAAa;QASrB,OAAO,CAAC,mBAAmB;QAS3B,OAAO,CAAC,QAAQ;QAKhB,OAAO,CAAC,YAAY;QAUpB,OAAO,CAAC,sBAAsB;QAc9B,OAAO,CAAC,sBAAsB;QAI9B,OAAO,CAAC,iBAAiB;QAWzB,OAAO,CAAC,cAAc;QAKtB,OAAO,CAAC,iBAAiB;QAKzB,WAAW,IAAI,MAAM;QAIrB,kBAAkB,IAAI,MAAM;QAI5B,mBAAmB,cAIhB;QAEH,0BAA0B,cAKvB;QAEH,0BAA0B;QAC1B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;QAMjC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,eAAe,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAAE,CAAC;QA8CvP,OAAO,CAAC,IAAI,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;SAAE,GAAG,OAAO,CAAC;YAC3G,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QAwBI,UAAU,CAAC,IAAI,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;SAAE,GAAG,OAAO,CAAC;YAC9G,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QA4BF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;QAI9B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;gBAoB1C,qBAAqB;KA6BpC;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,mBAAmB,EAAE,QAAQ,CAAC,YAAY,CAAC;CAChD"}
1
+ {"version":3,"file":"BrandingLogoService.d.ts","sourceRoot":"","sources":["../../src/services/BrandingLogoService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK1D;;;;GAIG;AAEH,yBAAiB,QAAQ,CAAC;IACxB,MACa,YAAa,SAAQ,YAAY,CAAC,IAAI,CAAC,OAAO;QACzD,iEAAiE;QACjE,OAAO,CAAC,WAAW,CAA4E;QAE/F,OAAO,CAAC,aAAa;QASrB,OAAO,CAAC,mBAAmB;QAS3B,OAAO,CAAC,QAAQ;QAMhB,OAAO,CAAC,YAAY;QAcpB,OAAO,CAAC,gCAAgC;QAoBxC,OAAO,CAAC,sBAAsB;QAc9B,OAAO,CAAC,sBAAsB;QAI9B,OAAO,CAAC,iBAAiB;QAWzB,OAAO,CAAC,cAAc;QAKtB,OAAO,CAAC,iBAAiB;QAKzB,WAAW,IAAI,MAAM;QAIrB,kBAAkB,IAAI,MAAM;QAI5B,mBAAmB,cAIhB;QAEH,0BAA0B,cAKvB;QAEH,0BAA0B;QAC1B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;QAMjC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,eAAe,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAAE,CAAC;QA8CvP,OAAO,CAAC,IAAI,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;SAAE,GAAG,OAAO,CAAC;YAC3G,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QAwBI,UAAU,CAAC,IAAI,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;SAAE,GAAG,OAAO,CAAC;YAC9G,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,WAAW,EAAE,MAAM,CAAC;YACpB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QA0CF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;QAI9B,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QAyB3E,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;YACvD,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAClC,GAAG,IAAI,CAAC;gBAuBK,qBAAqB;KA6BpC;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,mBAAmB,EAAE,QAAQ,CAAC,YAAY,CAAC;CAChD"}
@@ -41,10 +41,11 @@ var Services;
41
41
  }
42
42
  }
43
43
  setCache(id, buffer) {
44
- this._binaryById[id] = { buffer, storedAt: Date.now() };
44
+ const sha256 = crypto_1.default.createHash('sha256').update(buffer).digest('hex');
45
+ this._binaryById[id] = { buffer, sha256, storedAt: Date.now() };
45
46
  this.pruneExpiredEntries();
46
47
  }
47
- getFromCache(id) {
48
+ getFromCache(id, expectedSha256) {
48
49
  const entry = this._binaryById[id];
49
50
  if (!entry)
50
51
  return null;
@@ -52,8 +53,32 @@ var Services;
52
53
  delete this._binaryById[id];
53
54
  return null;
54
55
  }
56
+ if (expectedSha256 && entry.sha256 !== expectedSha256) {
57
+ delete this._binaryById[id];
58
+ return null;
59
+ }
55
60
  return entry.buffer;
56
61
  }
62
+ scheduleSupersededFaviconCleanup(brandId, storageKey) {
63
+ const cleanupTimer = setTimeout(async () => {
64
+ try {
65
+ const currentBrand = await BrandingConfig.findOne({ id: brandId });
66
+ if (_.get(currentBrand, 'favicon.storageKey') === storageKey) {
67
+ return;
68
+ }
69
+ const disk = StorageManagerService.primaryDisk();
70
+ const retainedBytes = Buffer.from(await disk.getBytes(storageKey));
71
+ await disk.delete(storageKey);
72
+ // Keep a fresh in-process copy for another full TTL so a request that
73
+ // captured the superseded metadata before cleanup can still complete.
74
+ this.setCache(storageKey, retainedBytes);
75
+ }
76
+ catch (error) {
77
+ sails.log.warn(`BrandingLogoService failed to remove superseded favicon ${storageKey}:`, error);
78
+ }
79
+ }, this.getCacheTtlMs());
80
+ cleanupTimer.unref?.();
81
+ }
57
82
  isStorageNotFoundError(err) {
58
83
  if (!err || typeof err !== 'object') {
59
84
  return false;
@@ -83,9 +108,9 @@ var Services;
83
108
  const ext = this.extForContentType(contentType);
84
109
  return `${branding}/${portal}/images/logo.${ext}`;
85
110
  }
86
- faviconStorageKey(branding, portal, contentType) {
111
+ faviconStorageKey(branding, portal, contentType, sha256) {
87
112
  const ext = this.extForContentType(contentType);
88
- return `${branding}/${portal}/images/favicon.${ext}`;
113
+ return `${branding}/${portal}/images/favicon-${sha256}-${crypto_1.default.randomUUID()}.${ext}`;
89
114
  }
90
115
  getMaxBytes() {
91
116
  return _.get(sails, 'config.branding.logoMaxBytes', 512 * 1024);
@@ -182,7 +207,7 @@ var Services;
182
207
  if (!ok)
183
208
  throw new Error('favicon-invalid: ' + errorList.join(','));
184
209
  const resolvedContentType = finalContentType ?? opts.contentType;
185
- const storageKey = this.faviconStorageKey(opts.branding, opts.portal, resolvedContentType);
210
+ const storageKey = this.faviconStorageKey(opts.branding, opts.portal, resolvedContentType, sha256);
186
211
  await StorageManagerService.primaryDisk().put(storageKey, sanitizedBuffer, { contentType: resolvedContentType });
187
212
  this.setCache(storageKey, sanitizedBuffer);
188
213
  const meta = {
@@ -192,19 +217,40 @@ var Services;
192
217
  contentType: resolvedContentType,
193
218
  updatedAt: new Date().toISOString(),
194
219
  };
195
- await BrandingConfig.update({ id: brand.id }, { favicon: meta });
220
+ try {
221
+ await BrandingConfig.update({ id: brand.id }, { favicon: meta });
222
+ }
223
+ catch (error) {
224
+ try {
225
+ await StorageManagerService.primaryDisk().delete(storageKey);
226
+ delete this._binaryById[storageKey];
227
+ }
228
+ catch (cleanupError) {
229
+ sails.log.warn(`BrandingLogoService failed to remove unreferenced favicon ${storageKey}:`, cleanupError);
230
+ }
231
+ throw error;
232
+ }
233
+ const previousStorageKey = _.get(brand, 'favicon.storageKey');
234
+ if (previousStorageKey && previousStorageKey !== storageKey) {
235
+ this.scheduleSupersededFaviconCleanup(brand.id, previousStorageKey);
236
+ }
196
237
  return { hash: sha256, gridFsId: storageKey, storageKey, contentType: resolvedContentType, updatedAt: meta.updatedAt };
197
238
  }
198
239
  getBinary(id) {
199
240
  return this.getFromCache(id);
200
241
  }
201
- async getBinaryAsync(id) {
202
- const mem = this.getFromCache(id);
242
+ async getBinaryAsync(id, expectedSha256) {
243
+ const mem = this.getFromCache(id, expectedSha256);
203
244
  if (mem)
204
245
  return mem;
205
246
  try {
206
247
  const bytes = await StorageManagerService.primaryDisk().getBytes(id);
207
248
  const buf = Buffer.from(bytes);
249
+ const actualSha256 = crypto_1.default.createHash('sha256').update(buf).digest('hex');
250
+ if (expectedSha256 && actualSha256 !== expectedSha256) {
251
+ sails.log.warn(`BrandingLogoService.getBinaryAsync hash mismatch for ${id}`);
252
+ return null;
253
+ }
208
254
  this.setCache(id, buf);
209
255
  return buf;
210
256
  }
@@ -218,6 +264,28 @@ var Services;
218
264
  return null;
219
265
  }
220
266
  }
267
+ async getCurrentFaviconBinary(branding) {
268
+ let failedStorageId = null;
269
+ for (let attempt = 0; attempt < 2; attempt += 1) {
270
+ const brand = await BrandingConfig.findOne({ name: branding });
271
+ const favicon = brand?.favicon;
272
+ const storageId = typeof favicon?.storageKey === 'string'
273
+ ? favicon.storageKey
274
+ : typeof favicon?.gridFsId === 'string'
275
+ ? favicon.gridFsId
276
+ : null;
277
+ if (!favicon || !storageId || storageId === failedStorageId) {
278
+ return null;
279
+ }
280
+ const expectedSha256 = typeof favicon.sha256 === 'string' ? favicon.sha256 : undefined;
281
+ const buffer = await this.getBinaryAsync(storageId, expectedSha256);
282
+ if (buffer) {
283
+ return { buffer, favicon };
284
+ }
285
+ failedStorageId = storageId;
286
+ }
287
+ return null;
288
+ }
221
289
  async getLegacyGridFsBinary(id) {
222
290
  const datastores = sails.config?.datastores;
223
291
  const url = datastores?.mongodb?.url;
@@ -254,4 +322,4 @@ var Services;
254
322
  ], BrandingLogo);
255
323
  Services.BrandingLogo = BrandingLogo;
256
324
  })(Services || (exports.Services = Services = {}));
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJhbmRpbmdMb2dvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CcmFuZGluZ0xvZ29TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGdEQUEwRDtBQUMxRCxzR0FBeUY7QUFDekYsb0RBQTRCO0FBQzVCLHFDQUE4RDtBQUU5RDs7OztHQUlHO0FBRUgsSUFBaUIsUUFBUSxDQThReEI7QUE5UUQsV0FBaUIsUUFBUTtJQUV2QixJQUFhLFlBQVksR0FBekIsTUFBYSxZQUFhLFNBQVEsc0JBQVksQ0FBQyxJQUFJLENBQUMsT0FBTztRQUN6RCxpRUFBaUU7UUFDekQsV0FBVyxHQUF5RCxFQUFFLENBQUM7UUFFdkUsYUFBYTtZQUNuQixNQUFNLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0RCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdGLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQztZQUNELE9BQU8seUJBQXlCLENBQUM7UUFDbkMsQ0FBQztRQUVPLG1CQUFtQixDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxJ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
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJhbmRpbmdMb2dvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CcmFuZGluZ0xvZ29TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGdEQUEwRDtBQUMxRCxzR0FBeUY7QUFDekYsb0RBQTRCO0FBQzVCLHFDQUE4RDtBQUU5RDs7OztHQUlHO0FBRUgsSUFBaUIsUUFBUSxDQW9WeEI7QUFwVkQsV0FBaUIsUUFBUTtJQUV2QixJQUFhLFlBQVksR0FBekIsTUFBYSxZQUFhLFNBQVEsc0JBQVksQ0FBQyxJQUFJLENBQUMsT0FBTztRQUN6RCxpRUFBaUU7UUFDekQsV0FBVyxHQUF5RSxFQUFFLENBQUM7UUFFdkYsYUFBYTtZQUNuQixNQUFNLHlCQUF5QixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0RCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQzdGLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQztZQUNELE9BQU8seUJBQXlCLENBQUM7UUFDbkMsQ0FBQztRQUVPLG1CQUFtQixDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzFDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxJ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
@@ -1,6 +1,54 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { Services as services } from '../CoreService';
3
3
  import { BrandingModel } from '../model/storage/BrandingModel';
4
+ import { type BrandingTypefaceSlot, type BrandingTypefaceState } from '../model/BrandingTypeface';
5
+ /** Canonical Admin configuration response (design.md section 5.3). */
6
+ export interface BrandingVersionEntry {
7
+ id: string;
8
+ /** Owning brand ID (compatibility projection for history consumers). */
9
+ branding?: string;
10
+ version: number;
11
+ hash: string;
12
+ dateCreated: string;
13
+ actorId?: string;
14
+ actorDisplayName?: string;
15
+ restoredFromVersion?: number;
16
+ variables: Record<string, string>;
17
+ typeface: BrandingTypefaceState;
18
+ }
19
+ export interface BrandingHealthWarning {
20
+ code: string;
21
+ slot?: BrandingTypefaceSlot;
22
+ sha256?: string;
23
+ }
24
+ export interface BrandingAdminState {
25
+ branding: {
26
+ id: string;
27
+ name: string;
28
+ };
29
+ active: {
30
+ version: number;
31
+ hash: string;
32
+ variables: Record<string, string>;
33
+ typeface: BrandingTypefaceState;
34
+ };
35
+ draft: {
36
+ revision: number;
37
+ variables: Record<string, string>;
38
+ typeface: BrandingTypefaceState;
39
+ dirty: {
40
+ colours: boolean;
41
+ typeface: boolean;
42
+ };
43
+ };
44
+ versions: BrandingVersionEntry[];
45
+ limits: {
46
+ faceMaxBytes: number;
47
+ familyMaxBytes: number;
48
+ historyMaxVersions: number;
49
+ };
50
+ healthWarnings: BrandingHealthWarning[];
51
+ }
4
52
  export declare namespace Services {
5
53
  /**
6
54
  * Branding related functions...
@@ -22,19 +70,94 @@ export declare namespace Services {
22
70
  getBrandingFromDB(name: string): Promise<BrandingModel>;
23
71
  getAvailable: () => string[];
24
72
  getBrandAndPortalPath(req: Sails.ReqParamProvider): string;
73
+ getFaviconUrl(req: Sails.ReqParamProvider): string;
25
74
  getRootContext(): string;
26
75
  getFullPath(req: Sails.ReqParamProvider): string;
27
76
  getBrandNameFromReq(req: Sails.ReqParamProvider): string;
28
77
  getBrandFromReq(req: Sails.ReqParamProvider): BrandingModel;
29
78
  getPortalFromReq(req: Sails.ReqParamProvider): string;
30
- /** Save draft variables after whitelist + contrast validation */
79
+ private readHistoryMaxVersions;
80
+ private snapshotKey;
81
+ private brandCounters;
82
+ private conflictError;
83
+ private codedError;
84
+ private isUniqueViolation;
85
+ private extractActor;
86
+ private loadBrandOrThrow;
87
+ private draftTypefaceOf;
88
+ private listHistoriesAsc;
89
+ private activeHistoryRow;
90
+ private maxHistoryVersion;
91
+ private publicationIdentity;
92
+ /** Newest-first version entries shared by getAdminState and listVersions. */
93
+ private buildVersionEntries;
94
+ /**
95
+ * Canonical Admin-state response builder (design.md section 5.3).
96
+ *
97
+ * Every response includes advisory active-face health, including mutations,
98
+ * because the Admin UI replaces its canonical state with each response.
99
+ */
100
+ getAdminState(branding: string): Promise<BrandingAdminState>;
101
+ /** Retained versions newest-first (no storage health reads). */
102
+ listVersions(branding: string): Promise<BrandingVersionEntry[]>;
103
+ /**
104
+ * Advisory active-asset health; config retrieval never fails on storage errors.
105
+ * Missing objects are reported via a cheap existence probe; only faces that
106
+ * exist pay for a full read plus hash verification (corruption check).
107
+ */
108
+ private activeHealthWarnings;
109
+ private requireDraftRevision;
110
+ private requireCounters;
111
+ private conditionalDraftUpdate;
112
+ /** Save colour draft; typeface draft is preserved untouched. */
31
113
  saveDraft(input: {
32
114
  branding: string;
33
115
  variables: Record<string, string>;
116
+ expectedDraftRevision?: number;
117
+ actor?: unknown;
118
+ }): Promise<BrandingAdminState>;
119
+ /** Stage one uploaded face and apply a single-slot draft mutation. */
120
+ uploadTypefaceFace(input: {
121
+ branding: string;
122
+ slot: string;
123
+ bytes: Buffer;
124
+ originalFilename?: string;
125
+ expectedDraftRevision?: number;
126
+ actor?: unknown;
127
+ }): Promise<BrandingAdminState>;
128
+ /** Remove one draft face; the active typeface is untouched. */
129
+ removeTypefaceFace(input: {
130
+ branding: string;
131
+ slot: string;
132
+ expectedDraftRevision?: number;
133
+ actor?: unknown;
134
+ }): Promise<BrandingAdminState>;
135
+ /** Set the draft typeface to Default Typography; draft colours are preserved. */
136
+ useDefaultTypography(input: {
137
+ branding: string;
138
+ expectedDraftRevision?: number;
34
139
  actor?: unknown;
35
- }): Promise<BrandingModel | null>;
36
- /** Generate preview token storing compiled CSS in CacheEntry */
37
- preview(branding: string, portal: string): Promise<{
140
+ }): Promise<BrandingAdminState>;
141
+ /** Copy only the active typeface into the draft; draft colours are preserved. */
142
+ revertTypefaceDraft(input: {
143
+ branding: string;
144
+ expectedDraftRevision?: number;
145
+ actor?: unknown;
146
+ }): Promise<BrandingAdminState>;
147
+ private previewUrl;
148
+ /** Generate preview CSS for an exact draft revision (non-mutating). */
149
+ preview(branding: string, portal: string, expectedDraftRevision?: number): Promise<{
150
+ token: string;
151
+ url: string;
152
+ hash: string;
153
+ revision: number;
154
+ }>;
155
+ /** Preview a retained version without mutating the draft. */
156
+ previewVersion(input: {
157
+ branding: string;
158
+ portal: string;
159
+ versionId: string;
160
+ }): Promise<{
38
161
  token: string;
39
162
  url: string;
40
163
  hash: string;
@@ -45,21 +168,60 @@ export declare namespace Services {
45
168
  branding: string;
46
169
  portal: string;
47
170
  hash: string;
171
+ revision?: number;
172
+ versionId?: string;
48
173
  }>;
49
- /** Publish current draft (variables) -> CSS, bump version, persist hash, history */
50
- publish(branding: string, portal: string, _actor: unknown, opts?: {
174
+ private buildPublishSnapshot;
175
+ private persistPublication;
176
+ /** Publish the draft atomically; unchanged publishes are idempotent. */
177
+ publish(branding: string, portal: string, actor: unknown, opts?: {
51
178
  expectedVersion?: number;
179
+ expectedDraftRevision?: number;
52
180
  }): Promise<{
181
+ state: BrandingAdminState;
53
182
  version: number;
54
183
  hash: string;
55
184
  idempotent?: boolean;
56
185
  }>;
57
- /** Rollback to a previous published version via history id */
58
- rollback(historyId: string, _actor: unknown): Promise<{
186
+ /** Restore a retained version as a new monotonically increasing version. */
187
+ restore(input: {
188
+ branding: string;
189
+ versionId: string;
190
+ expectedVersion?: number;
191
+ expectedDraftRevision?: number;
192
+ actor?: unknown;
193
+ }): Promise<{
194
+ state: BrandingAdminState;
195
+ version: number;
196
+ hash: string;
197
+ }>;
198
+ /**
199
+ * Deprecated one-major-release alias with restore semantics.
200
+ * Kept only for the compatibility route; new code must call restore.
201
+ */
202
+ rollback(versionId: string, actor: unknown, opts?: {
203
+ branding?: string;
204
+ expectedVersion?: number;
205
+ expectedDraftRevision?: number;
206
+ }): Promise<{
207
+ state: BrandingAdminState;
59
208
  version: number;
60
209
  hash: string;
61
- branding: BrandingModel | null;
62
210
  }>;
211
+ /** Retain only the newest configured history rows after a durable transition. */
212
+ private pruneHistories;
213
+ /**
214
+ * Remove an ambiguous non-transactional attempt once a later publication
215
+ * has committed the same snapshot. Such rows can sit above the active
216
+ * version when an update response is lost and must not consume retention.
217
+ */
218
+ private pruneSupersededAmbiguousHistories;
219
+ /** Regular-face public URL for an active custom typeface, else null. */
220
+ getActiveTypefaceFontInfo(brandingName: string): {
221
+ regularUrl: string;
222
+ } | null;
223
+ /** True when the resolved brand has an active custom typeface with a Regular face. */
224
+ hasActiveCustomTypeface(brandingName: string): boolean;
63
225
  /** Refresh a single branding record in the in-memory cache (this.brandings & availableBrandings) */
64
226
  refreshBrandingCache(id: string): Promise<BrandingModel | null>;
65
227
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BrandingService.d.ts","sourceRoot":"","sources":["../../src/services/BrandingService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrandingService.d.ts","sourceRoot":"","sources":["../../src/services/BrandingService.ts"],"names":[],"mappings":"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"}