@researchdatabox/redbox-core 5.0.3 → 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.
Files changed (546) 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 +4 -0
  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 +48 -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 +105 -12
  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 +48 -8
  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/OniPublishing.d.ts +205 -0
  156. package/dist/configmodels/OniPublishing.d.ts.map +1 -0
  157. package/dist/configmodels/OniPublishing.js +335 -0
  158. package/dist/configmodels/RaidPublishing.d.ts +97 -0
  159. package/dist/configmodels/RaidPublishing.d.ts.map +1 -0
  160. package/dist/configmodels/RaidPublishing.js +35 -0
  161. package/dist/configmodels/WebAnalytics.d.ts +55 -0
  162. package/dist/configmodels/WebAnalytics.d.ts.map +1 -0
  163. package/dist/configmodels/WebAnalytics.js +61 -0
  164. package/dist/controllers/AppConfigController.d.ts.map +1 -1
  165. package/dist/controllers/AppConfigController.js +4 -1
  166. package/dist/controllers/BrandingAppController.d.ts +29 -7
  167. package/dist/controllers/BrandingAppController.d.ts.map +1 -1
  168. package/dist/controllers/BrandingAppController.js +265 -69
  169. package/dist/controllers/BrandingController.d.ts +24 -1
  170. package/dist/controllers/BrandingController.d.ts.map +1 -1
  171. package/dist/controllers/BrandingController.js +173 -43
  172. package/dist/controllers/BrandingControllerSupport.d.ts +20 -0
  173. package/dist/controllers/BrandingControllerSupport.d.ts.map +1 -0
  174. package/dist/controllers/BrandingControllerSupport.js +80 -0
  175. package/dist/controllers/DashboardConfigController.d.ts +6 -2
  176. package/dist/controllers/DashboardConfigController.d.ts.map +1 -1
  177. package/dist/controllers/DashboardConfigController.js +18 -4
  178. package/dist/controllers/DynamicAssetController.d.ts +7 -5
  179. package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
  180. package/dist/controllers/DynamicAssetController.js +21 -12
  181. package/dist/controllers/RecordController.d.ts +45 -4
  182. package/dist/controllers/RecordController.d.ts.map +1 -1
  183. package/dist/controllers/RecordController.js +778 -345
  184. package/dist/controllers/index.d.ts.map +1 -1
  185. package/dist/controllers/index.js +4 -1
  186. package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
  187. package/dist/controllers/webservice/AdminController.js +4 -3
  188. package/dist/controllers/webservice/BrandingController.d.ts +26 -1
  189. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  190. package/dist/controllers/webservice/BrandingController.js +292 -116
  191. package/dist/controllers/webservice/DashboardConfigController.d.ts +25 -17
  192. package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -1
  193. package/dist/controllers/webservice/DashboardConfigController.js +90 -205
  194. package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
  195. package/dist/controllers/webservice/FormManagementController.js +37 -3
  196. package/dist/controllers/webservice/RecordController.d.ts +15 -1
  197. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  198. package/dist/controllers/webservice/RecordController.js +647 -267
  199. package/dist/controllers/webservice/RecordSchemaController.d.ts +32 -0
  200. package/dist/controllers/webservice/RecordSchemaController.d.ts.map +1 -0
  201. package/dist/controllers/webservice/RecordSchemaController.js +356 -0
  202. package/dist/controllers/webservice/RecordTypeController.d.ts +6 -1
  203. package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
  204. package/dist/controllers/webservice/RecordTypeController.js +21 -3
  205. package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
  206. package/dist/controllers/webservice/SearchController.js +7 -3
  207. package/dist/hooks/defineRedboxHook.d.ts +3 -0
  208. package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
  209. package/dist/hooks/defineRedboxHook.js +4 -1
  210. package/dist/index.d.ts +50 -23
  211. package/dist/index.d.ts.map +1 -1
  212. package/dist/index.js +90 -2
  213. package/dist/loader/bootstrapShimRuntime.d.ts +1 -1
  214. package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
  215. package/dist/loader/bootstrapShimRuntime.js +20 -12
  216. package/dist/loader/index.d.ts +9 -0
  217. package/dist/loader/index.d.ts.map +1 -1
  218. package/dist/loader/index.js +93 -4
  219. package/dist/model/BrandingTypeface.d.ts +70 -0
  220. package/dist/model/BrandingTypeface.d.ts.map +1 -0
  221. package/dist/model/BrandingTypeface.js +116 -0
  222. package/dist/model/BuildResponse.d.ts +25 -11
  223. package/dist/model/BuildResponse.d.ts.map +1 -1
  224. package/dist/model/BuildResponse.js +4 -3
  225. package/dist/model/DashboardTypeResponseModel.d.ts +6 -0
  226. package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
  227. package/dist/model/DashboardTypeResponseModel.js +7 -1
  228. package/dist/model/DashboardViewResponseModel.d.ts +5 -1
  229. package/dist/model/DashboardViewResponseModel.d.ts.map +1 -1
  230. package/dist/model/DashboardViewResponseModel.js +6 -3
  231. package/dist/model/RBValidationError.d.ts +17 -0
  232. package/dist/model/RBValidationError.d.ts.map +1 -1
  233. package/dist/model/RBValidationError.js +37 -1
  234. package/dist/model/RecordTypeResponseModel.d.ts +12 -4
  235. package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
  236. package/dist/model/RecordTypeResponseModel.js +11 -2
  237. package/dist/model/index.d.ts +5 -1
  238. package/dist/model/index.d.ts.map +1 -1
  239. package/dist/model/index.js +5 -2
  240. package/dist/model/record-contract.d.ts +42 -0
  241. package/dist/model/record-contract.d.ts.map +1 -0
  242. package/dist/model/record-contract.js +3 -0
  243. package/dist/model/storage/BrandingModel.d.ts +7 -0
  244. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  245. package/dist/model/storage/BrandingModel.js +7 -1
  246. package/dist/model/storage/DeletedRecordModel.d.ts +35 -0
  247. package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -1
  248. package/dist/model/storage/DeletedRecordModel.js +62 -1
  249. package/dist/model/storage/IntegrationAuditModel.d.ts +16 -2
  250. package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
  251. package/dist/model/storage/IntegrationAuditModel.js +15 -1
  252. package/dist/model/storage/RecordAuditModel.d.ts +11 -1
  253. package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
  254. package/dist/model/storage/RecordAuditModel.js +8 -2
  255. package/dist/model/storage/RecordModel.d.ts +6 -0
  256. package/dist/model/storage/RecordModel.d.ts.map +1 -1
  257. package/dist/model/storage/RecordTypeModel.d.ts +6 -0
  258. package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
  259. package/dist/model/storage/RecordTypeModel.js +4 -1
  260. package/dist/model/storage/index.d.ts +12 -10
  261. package/dist/model/storage/index.d.ts.map +1 -1
  262. package/dist/model/storage/index.js +24 -2
  263. package/dist/model/storage/record-schema.d.ts +115 -0
  264. package/dist/model/storage/record-schema.d.ts.map +1 -0
  265. package/dist/model/storage/record-schema.js +3 -0
  266. package/dist/policies/checkAuth.d.ts +2 -6
  267. package/dist/policies/checkAuth.d.ts.map +1 -1
  268. package/dist/policies/checkAuth.js +32 -9
  269. package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
  270. package/dist/policies/contentSecurityPolicy.js +85 -2
  271. package/dist/policies/index.d.ts +3 -2
  272. package/dist/policies/index.d.ts.map +1 -1
  273. package/dist/policies/index.js +4 -2
  274. package/dist/policies/validateApiContractRequest.d.ts.map +1 -1
  275. package/dist/policies/validateApiContractRequest.js +49 -11
  276. package/dist/record-contract/ajv-error-mapper.d.ts +34 -0
  277. package/dist/record-contract/ajv-error-mapper.d.ts.map +1 -0
  278. package/dist/record-contract/ajv-error-mapper.js +153 -0
  279. package/dist/record-contract/canonical-json.d.ts +20 -0
  280. package/dist/record-contract/canonical-json.d.ts.map +1 -0
  281. package/dist/record-contract/canonical-json.js +126 -0
  282. package/dist/record-contract/codes.d.ts +36 -0
  283. package/dist/record-contract/codes.d.ts.map +1 -0
  284. package/dist/record-contract/codes.js +38 -0
  285. package/dist/record-contract/contributor-registry.d.ts +76 -0
  286. package/dist/record-contract/contributor-registry.d.ts.map +1 -0
  287. package/dist/record-contract/contributor-registry.js +126 -0
  288. package/dist/record-contract/core-contributors.d.ts +44 -0
  289. package/dist/record-contract/core-contributors.d.ts.map +1 -0
  290. package/dist/record-contract/core-contributors.js +395 -0
  291. package/dist/record-contract/deep-freeze.d.ts +3 -0
  292. package/dist/record-contract/deep-freeze.d.ts.map +1 -0
  293. package/dist/record-contract/deep-freeze.js +23 -0
  294. package/dist/record-contract/index.d.ts +13 -0
  295. package/dist/record-contract/index.d.ts.map +1 -0
  296. package/dist/record-contract/index.js +29 -0
  297. package/dist/record-contract/json-pointer.d.ts +20 -0
  298. package/dist/record-contract/json-pointer.d.ts.map +1 -0
  299. package/dist/record-contract/json-pointer.js +70 -0
  300. package/dist/record-contract/json-schema-renderer.d.ts +51 -0
  301. package/dist/record-contract/json-schema-renderer.d.ts.map +1 -0
  302. package/dist/record-contract/json-schema-renderer.js +450 -0
  303. package/dist/record-contract/record-contract-compiler.d.ts +42 -0
  304. package/dist/record-contract/record-contract-compiler.d.ts.map +1 -0
  305. package/dist/record-contract/record-contract-compiler.js +775 -0
  306. package/dist/record-contract/record-contract-context.d.ts +91 -0
  307. package/dist/record-contract/record-contract-context.d.ts.map +1 -0
  308. package/dist/record-contract/record-contract-context.js +39 -0
  309. package/dist/record-contract/record-json-schema-artifact.d.ts +74 -0
  310. package/dist/record-contract/record-json-schema-artifact.d.ts.map +1 -0
  311. package/dist/record-contract/record-json-schema-artifact.js +309 -0
  312. package/dist/record-contract/record-json-schema-etag.d.ts +15 -0
  313. package/dist/record-contract/record-json-schema-etag.d.ts.map +1 -0
  314. package/dist/record-contract/record-json-schema-etag.js +41 -0
  315. package/dist/record-contract/types.d.ts +151 -0
  316. package/dist/record-contract/types.d.ts.map +1 -0
  317. package/dist/record-contract/types.js +6 -0
  318. package/dist/services/AppConfigService.d.ts +6 -0
  319. package/dist/services/AppConfigService.d.ts.map +1 -1
  320. package/dist/services/AppConfigService.js +23 -1
  321. package/dist/services/AttachmentMetadataService.d.ts +58 -0
  322. package/dist/services/AttachmentMetadataService.d.ts.map +1 -1
  323. package/dist/services/AttachmentMetadataService.js +643 -8
  324. package/dist/services/BrandingLogoService.d.ts +6 -1
  325. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  326. package/dist/services/BrandingLogoService.js +77 -9
  327. package/dist/services/BrandingService.d.ts +171 -9
  328. package/dist/services/BrandingService.d.ts.map +1 -1
  329. package/dist/services/BrandingService.js +572 -68
  330. package/dist/services/BrandingThemeCssService.d.ts +17 -1
  331. package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
  332. package/dist/services/BrandingThemeCssService.js +71 -9
  333. package/dist/services/BrandingTypefaceService.d.ts +74 -0
  334. package/dist/services/BrandingTypefaceService.d.ts.map +1 -0
  335. package/dist/services/BrandingTypefaceService.js +359 -0
  336. package/dist/services/BrandingWoff2Inspector.d.ts +17 -0
  337. package/dist/services/BrandingWoff2Inspector.d.ts.map +1 -0
  338. package/dist/services/BrandingWoff2Inspector.js +402 -0
  339. package/dist/services/DashboardConfigService.d.ts +214 -54
  340. package/dist/services/DashboardConfigService.d.ts.map +1 -1
  341. package/dist/services/DashboardConfigService.js +829 -261
  342. package/dist/services/DashboardLegacyConversion.d.ts +82 -0
  343. package/dist/services/DashboardLegacyConversion.d.ts.map +1 -0
  344. package/dist/services/DashboardLegacyConversion.js +427 -0
  345. package/dist/services/DashboardTypesService.d.ts +15 -4
  346. package/dist/services/DashboardTypesService.d.ts.map +1 -1
  347. package/dist/services/DashboardTypesService.js +72 -139
  348. package/dist/services/DoiService.d.ts +1 -1
  349. package/dist/services/DoiService.d.ts.map +1 -1
  350. package/dist/services/DoiService.js +71 -45
  351. package/dist/services/FigshareService.d.ts +1 -1
  352. package/dist/services/FigshareService.d.ts.map +1 -1
  353. package/dist/services/FigshareService.js +73 -32
  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 +1 -0
  364. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  365. package/dist/services/I18nEntriesService.js +26 -6
  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 +313 -22
  385. package/dist/services/RecordsService.d.ts.map +1 -1
  386. package/dist/services/RecordsService.js +4948 -509
  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/form-record-access-user.d.ts +3 -0
  419. package/dist/services/form-record-access-user.d.ts.map +1 -0
  420. package/dist/services/form-record-access-user.js +23 -0
  421. package/dist/services/index.d.ts +9 -0
  422. package/dist/services/index.d.ts.map +1 -1
  423. package/dist/services/index.js +45 -3
  424. package/dist/services/integration-v2/bindings.d.ts +3 -0
  425. package/dist/services/integration-v2/bindings.d.ts.map +1 -0
  426. package/dist/services/integration-v2/bindings.js +91 -0
  427. package/dist/services/integration-v2/runtime.d.ts +3 -0
  428. package/dist/services/integration-v2/runtime.d.ts.map +1 -0
  429. package/dist/services/integration-v2/runtime.js +50 -0
  430. package/dist/services/internal-record-schema-authorization.d.ts +8 -0
  431. package/dist/services/internal-record-schema-authorization.d.ts.map +1 -0
  432. package/dist/services/internal-record-schema-authorization.js +16 -0
  433. package/dist/services/oni-v2/audit.d.ts +19 -0
  434. package/dist/services/oni-v2/audit.d.ts.map +1 -0
  435. package/dist/services/oni-v2/audit.js +50 -0
  436. package/dist/services/oni-v2/bindings.d.ts +7 -0
  437. package/dist/services/oni-v2/bindings.d.ts.map +1 -0
  438. package/dist/services/oni-v2/bindings.js +31 -0
  439. package/dist/services/oni-v2/config.d.ts +12 -0
  440. package/dist/services/oni-v2/config.d.ts.map +1 -0
  441. package/dist/services/oni-v2/config.js +134 -0
  442. package/dist/services/oni-v2/context.d.ts +3 -0
  443. package/dist/services/oni-v2/context.d.ts.map +1 -0
  444. package/dist/services/oni-v2/context.js +17 -0
  445. package/dist/services/oni-v2/crate.d.ts +17 -0
  446. package/dist/services/oni-v2/crate.d.ts.map +1 -0
  447. package/dist/services/oni-v2/crate.js +504 -0
  448. package/dist/services/oni-v2/flydriveOcflStore.d.ts +69 -0
  449. package/dist/services/oni-v2/flydriveOcflStore.d.ts.map +1 -0
  450. package/dist/services/oni-v2/flydriveOcflStore.js +325 -0
  451. package/dist/services/oni-v2/ingestion.d.ts +37 -0
  452. package/dist/services/oni-v2/ingestion.d.ts.map +1 -0
  453. package/dist/services/oni-v2/ingestion.js +91 -0
  454. package/dist/services/oni-v2/mapping.d.ts +17 -0
  455. package/dist/services/oni-v2/mapping.d.ts.map +1 -0
  456. package/dist/services/oni-v2/mapping.js +137 -0
  457. package/dist/services/oni-v2/repository.d.ts +9 -0
  458. package/dist/services/oni-v2/repository.d.ts.map +1 -0
  459. package/dist/services/oni-v2/repository.js +180 -0
  460. package/dist/services/oni-v2/runtime.d.ts +23 -0
  461. package/dist/services/oni-v2/runtime.d.ts.map +1 -0
  462. package/dist/services/oni-v2/runtime.js +121 -0
  463. package/dist/services/oni-v2/templating.d.ts +11 -0
  464. package/dist/services/oni-v2/templating.d.ts.map +1 -0
  465. package/dist/services/oni-v2/templating.js +27 -0
  466. package/dist/services/oni-v2/types.d.ts +100 -0
  467. package/dist/services/oni-v2/types.d.ts.map +1 -0
  468. package/dist/services/oni-v2/types.js +3 -0
  469. package/dist/services/raid-v2/audit.d.ts +10 -0
  470. package/dist/services/raid-v2/audit.d.ts.map +1 -0
  471. package/dist/services/raid-v2/audit.js +29 -0
  472. package/dist/services/raid-v2/errors.d.ts +85 -0
  473. package/dist/services/raid-v2/errors.d.ts.map +1 -0
  474. package/dist/services/raid-v2/errors.js +36 -0
  475. package/dist/services/raid-v2/http.d.ts +4 -0
  476. package/dist/services/raid-v2/http.d.ts.map +1 -0
  477. package/dist/services/raid-v2/http.js +84 -0
  478. package/dist/services/raid-v2/logger.d.ts +8 -0
  479. package/dist/services/raid-v2/logger.d.ts.map +1 -0
  480. package/dist/services/raid-v2/logger.js +30 -0
  481. package/dist/services/raid-v2/mapping.d.ts +9 -0
  482. package/dist/services/raid-v2/mapping.d.ts.map +1 -0
  483. package/dist/services/raid-v2/mapping.js +168 -0
  484. package/dist/services/raid-v2/runtime.d.ts +5 -0
  485. package/dist/services/raid-v2/runtime.d.ts.map +1 -0
  486. package/dist/services/raid-v2/runtime.js +135 -0
  487. package/dist/services/raid-v2/tags.d.ts +11 -0
  488. package/dist/services/raid-v2/tags.d.ts.map +1 -0
  489. package/dist/services/raid-v2/tags.js +12 -0
  490. package/dist/services/raid-v2/types.d.ts +66 -0
  491. package/dist/services/raid-v2/types.d.ts.map +1 -0
  492. package/dist/services/raid-v2/types.js +3 -0
  493. package/dist/services/record-hooks/coordinator.d.ts +64 -0
  494. package/dist/services/record-hooks/coordinator.d.ts.map +1 -0
  495. package/dist/services/record-hooks/coordinator.js +276 -0
  496. package/dist/visitor/client.visitor.d.ts +6 -0
  497. package/dist/visitor/client.visitor.d.ts.map +1 -1
  498. package/dist/visitor/client.visitor.js +59 -14
  499. package/dist/visitor/construct.visitor.d.ts +27 -1
  500. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  501. package/dist/visitor/construct.visitor.js +265 -177
  502. package/dist/visitor/context-variables.visitor.d.ts +3 -1
  503. package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
  504. package/dist/visitor/context-variables.visitor.js +15 -1
  505. package/dist/visitor/data-value.visitor.d.ts +6 -0
  506. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  507. package/dist/visitor/data-value.visitor.js +10 -1
  508. package/dist/visitor/json-type-def.visitor.d.ts +6 -0
  509. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  510. package/dist/visitor/json-type-def.visitor.js +10 -1
  511. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +11 -0
  512. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  513. package/dist/visitor/migrate-config-v4-v5.visitor.js +228 -133
  514. package/dist/visitor/related-object-data-inline.visitor.d.ts +31 -0
  515. package/dist/visitor/related-object-data-inline.visitor.d.ts.map +1 -0
  516. package/dist/visitor/related-object-data-inline.visitor.js +96 -0
  517. package/dist/visitor/template.visitor.d.ts +17 -2
  518. package/dist/visitor/template.visitor.d.ts.map +1 -1
  519. package/dist/visitor/template.visitor.js +60 -22
  520. package/dist/visitor/validator.visitor.d.ts +49 -7
  521. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  522. package/dist/visitor/validator.visitor.js +275 -178
  523. package/dist/waterline-models/AttachmentMetadata.d.ts +22 -0
  524. package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -1
  525. package/dist/waterline-models/AttachmentMetadata.js +147 -3
  526. package/dist/waterline-models/BrandingConfig.d.ts +7 -0
  527. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  528. package/dist/waterline-models/BrandingConfig.js +16 -1
  529. package/dist/waterline-models/BrandingConfigHistory.d.ts +11 -2
  530. package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -1
  531. package/dist/waterline-models/BrandingConfigHistory.js +21 -1
  532. package/dist/waterline-models/DashboardConfiguration.d.ts +29 -0
  533. package/dist/waterline-models/DashboardConfiguration.d.ts.map +1 -0
  534. package/dist/waterline-models/DashboardConfiguration.js +52 -0
  535. package/dist/waterline-models/RecordType.d.ts +9 -0
  536. package/dist/waterline-models/RecordType.d.ts.map +1 -1
  537. package/dist/waterline-models/RecordType.js +16 -1
  538. package/dist/waterline-models/User.d.ts.map +1 -1
  539. package/dist/waterline-models/User.js +10 -15
  540. package/dist/waterline-models/index.d.ts +2 -0
  541. package/dist/waterline-models/index.d.ts.map +1 -1
  542. package/dist/waterline-models/index.js +4 -1
  543. package/package.json +60 -47
  544. package/dist/config/datapubs.config.d.ts +0 -72
  545. package/dist/config/datapubs.config.d.ts.map +0 -1
  546. package/dist/config/datapubs.config.js +0 -74
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RECORD_HTTP_HEADERS = void 0;
4
+ exports.parsePublicRecordConcurrencyRequest = parsePublicRecordConcurrencyRequest;
5
+ exports.recordConcurrencyRequestFailureResponse = recordConcurrencyRequestFailureResponse;
6
+ exports.recordRepresentationRevision = recordRepresentationRevision;
7
+ exports.recordRepresentationConcurrency = recordRepresentationConcurrency;
8
+ exports.recordSaveResultHeaders = recordSaveResultHeaders;
9
+ exports.recordSaveResultHeaderOption = recordSaveResultHeaderOption;
10
+ const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
11
+ const RecordEntityTag_1 = require("./RecordEntityTag");
12
+ const RecordStorageConcurrency_1 = require("./RecordStorageConcurrency");
13
+ exports.RECORD_HTTP_HEADERS = Object.freeze({
14
+ ifMatch: 'If-Match',
15
+ entityTag: 'ETag',
16
+ formFingerprint: 'X-ReDBox-Form-Fingerprint',
17
+ resolution: 'X-ReDBox-Concurrency-Resolution',
18
+ resolutionOfRequestId: 'X-ReDBox-Resolution-Of-Request-Id',
19
+ saveRequestId: 'X-ReDBox-Save-Request-Id',
20
+ });
21
+ const PUBLIC_MUTATION_RESOLUTIONS = new Set([
22
+ 'direct',
23
+ 'client-auto-merged',
24
+ 'client-manually-resolved',
25
+ ]);
26
+ /** Node normalizes incoming request-header names to lowercase. */
27
+ function readHeader(headers, name) {
28
+ if (!headers || typeof headers !== 'object' || Array.isArray(headers))
29
+ return undefined;
30
+ return headers[name.toLowerCase()];
31
+ }
32
+ /** `null` marks a present but unusable value, including a duplicate-value array. */
33
+ function singleStringHeader(value) {
34
+ if (value === undefined)
35
+ return undefined;
36
+ return typeof value === 'string' ? value : null;
37
+ }
38
+ /** `null` for a present but unusable value is deliberately preserved, not trimmed away. */
39
+ function trimmedHeader(value) {
40
+ const header = singleStringHeader(value);
41
+ return typeof header === 'string' ? header.trim() : header;
42
+ }
43
+ /** Clients may only claim resolutions a client can actually perform. */
44
+ function isPublicMutationResolution(value) {
45
+ return (0, sails_ng_common_1.isRecordConcurrencyResolution)(value) && PUBLIC_MUTATION_RESOLUTIONS.has(value);
46
+ }
47
+ /** Create routes accept no precondition: absent is fine, anything else is not. */
48
+ function createRouteEntityTagResult(value) {
49
+ const absent = value === undefined;
50
+ return { valid: false, reason: absent ? 'missing' : 'malformed' };
51
+ }
52
+ /**
53
+ * Normalize public optimistic-concurrency headers once at the HTTP boundary.
54
+ * Staleness and policy remain RecordsService/storage decisions; malformed
55
+ * request contracts are rejected before candidate work begins.
56
+ */
57
+ function parsePublicRecordConcurrencyRequest(headers, recordOid, options = {}) {
58
+ const ifMatchValue = readHeader(headers, exports.RECORD_HTTP_HEADERS.ifMatch);
59
+ // Create has no prior representation, so any supplied precondition is a
60
+ // request-contract error rather than something to compare.
61
+ let parsedTag;
62
+ try {
63
+ parsedTag =
64
+ recordOid === undefined
65
+ ? createRouteEntityTagResult(ifMatchValue)
66
+ : (0, RecordEntityTag_1.parseRecordEntityTag)(ifMatchValue, recordOid);
67
+ }
68
+ catch {
69
+ return { valid: false, code: 'record-if-match-invalid', header: exports.RECORD_HTTP_HEADERS.ifMatch };
70
+ }
71
+ if (!parsedTag.valid && parsedTag.reason !== 'missing') {
72
+ return { valid: false, code: 'record-if-match-invalid', header: exports.RECORD_HTTP_HEADERS.ifMatch };
73
+ }
74
+ // Only a generated browser form binds to a form definition; other routes
75
+ // ignore the header rather than validating a value they never compare.
76
+ const suppliedFingerprint = options.formBacked
77
+ ? singleStringHeader(readHeader(headers, exports.RECORD_HTTP_HEADERS.formFingerprint))
78
+ : undefined;
79
+ const formFingerprint = (0, sails_ng_common_1.isRecordFormFingerprint)(suppliedFingerprint) ? suppliedFingerprint : undefined;
80
+ if (suppliedFingerprint !== undefined && formFingerprint === undefined) {
81
+ return { valid: false, code: 'record-form-fingerprint-invalid', header: exports.RECORD_HTTP_HEADERS.formFingerprint };
82
+ }
83
+ // Once an update caller adopts the exact entity-tag protocol it must also
84
+ // bind the generated form contract. A truly old update with neither header
85
+ // is allowed through so strict policy can produce the specified review-only
86
+ // 428 response. Create has no prior representation; a missing fingerprint
87
+ // is therefore left to the record-type policy in RecordsService so default
88
+ // last-write-wins/observe callers remain compatible.
89
+ if (options.formBacked && !formFingerprint && parsedTag.valid) {
90
+ return { valid: false, code: 'record-form-fingerprint-invalid', header: exports.RECORD_HTTP_HEADERS.formFingerprint };
91
+ }
92
+ const suppliedResolution = trimmedHeader(readHeader(headers, exports.RECORD_HTTP_HEADERS.resolution));
93
+ const resolution = isPublicMutationResolution(suppliedResolution) ? suppliedResolution : undefined;
94
+ if (suppliedResolution !== undefined && resolution === undefined) {
95
+ return { valid: false, code: 'record-concurrency-resolution-invalid', header: exports.RECORD_HTTP_HEADERS.resolution };
96
+ }
97
+ // Linkage is required by, and only by, a client-resolved retry, and it names
98
+ // the earlier attempt rather than this one.
99
+ const suppliedLinkage = singleStringHeader(readHeader(headers, exports.RECORD_HTTP_HEADERS.resolutionOfRequestId));
100
+ const saveRequestId = singleStringHeader(readHeader(headers, exports.RECORD_HTTP_HEADERS.saveRequestId));
101
+ const linkageRequired = resolution === 'client-auto-merged' || resolution === 'client-manually-resolved';
102
+ const linkageAcceptable = suppliedLinkage === undefined
103
+ ? !linkageRequired
104
+ : linkageRequired &&
105
+ (0, sails_ng_common_1.isRecordSaveRequestId)(saveRequestId) &&
106
+ (0, sails_ng_common_1.isRecordSaveRequestId)(suppliedLinkage) &&
107
+ suppliedLinkage !== saveRequestId;
108
+ if (!linkageAcceptable) {
109
+ return {
110
+ valid: false,
111
+ code: 'record-concurrency-request-linkage-invalid',
112
+ header: linkageRequired && !(0, sails_ng_common_1.isRecordSaveRequestId)(saveRequestId)
113
+ ? exports.RECORD_HTTP_HEADERS.saveRequestId
114
+ : exports.RECORD_HTTP_HEADERS.resolutionOfRequestId,
115
+ };
116
+ }
117
+ return {
118
+ valid: true,
119
+ context: {
120
+ entityTagSupplied: parsedTag.valid,
121
+ ...(parsedTag.valid ? { expectedRevision: parsedTag.value.expectedRevision } : {}),
122
+ ...(formFingerprint ? { formFingerprint } : {}),
123
+ ...(resolution ? { resolution } : {}),
124
+ ...(suppliedLinkage ? { resolutionOfRequestId: suppliedLinkage } : {}),
125
+ },
126
+ };
127
+ }
128
+ function recordConcurrencyRequestFailureResponse(apiVersion, failure) {
129
+ return apiVersion === '1.0'
130
+ ? { status: 400, v1: { message: 'Invalid record concurrency request.' } }
131
+ : { status: 400, displayErrors: [{ code: failure.code, source: { header: failure.header } }] };
132
+ }
133
+ /**
134
+ * Revision of one stored active or tombstone representation. A record written
135
+ * before the revision migration reads as the initial revision; anything else
136
+ * non-conforming is a storage fault rather than a value to guess at.
137
+ */
138
+ function recordRepresentationRevision(record) {
139
+ if (!record || typeof record !== 'object' || Array.isArray(record)) {
140
+ throw new TypeError('A record representation is required.');
141
+ }
142
+ const revision = record.revision;
143
+ if (revision === undefined)
144
+ return RecordStorageConcurrency_1.INITIAL_RECORD_REVISION;
145
+ if (!(0, sails_ng_common_1.isRecordRevision)(revision)) {
146
+ throw new TypeError('The record representation has no valid revision.');
147
+ }
148
+ return revision;
149
+ }
150
+ /**
151
+ * Build read-side revision metadata and the `ETag` header from server-owned
152
+ * record fields only. Collection rows carry the numeric revision alone: a row
153
+ * is not an individual representation, so it gets no entity tag.
154
+ */
155
+ function recordRepresentationConcurrency(record) {
156
+ const revision = recordRepresentationRevision(record);
157
+ const oid = String(record.redboxOid ?? '').trim();
158
+ if (!oid) {
159
+ throw new TypeError('The record representation has no valid concurrency identity.');
160
+ }
161
+ const entityTag = (0, RecordEntityTag_1.formatRecordEntityTag)(oid, revision);
162
+ return {
163
+ headers: { [exports.RECORD_HTTP_HEADERS.entityTag]: entityTag },
164
+ metadata: { revision, entityTag },
165
+ };
166
+ }
167
+ /** Emit only the authoritative entity tag carried by a typed save result. */
168
+ function recordSaveResultHeaders(result) {
169
+ const entityTag = result?.concurrency?.entityTag;
170
+ return (0, sails_ng_common_1.isRecordEntityTag)(entityTag) ? { [exports.RECORD_HTTP_HEADERS.entityTag]: entityTag } : {};
171
+ }
172
+ /**
173
+ * Spreadable response fragment. The `headers` key is omitted entirely when a
174
+ * result carries no authoritative tag, so responses that never had one keep
175
+ * their existing shape.
176
+ */
177
+ function recordSaveResultHeaderOption(result) {
178
+ const headers = recordSaveResultHeaders(result);
179
+ return Object.keys(headers).length > 0 ? { headers } : {};
180
+ }
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkSHR0cENvbmN1cnJlbmN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JlY29yZEh0dHBDb25jdXJyZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrRkEsa0ZBK0VDO0FBRUQsMEZBT0M7QUFZRCxvRUFVQztBQU9ELDBFQVdDO0FBR0QsMERBS0M7QUFPRCxvRUFLQztBQXRPRCxzRUFTMEM7QUFDMUMsdURBQWlIO0FBRWpILHlFQUFxRTtBQUV4RCxRQUFBLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDL0MsT0FBTyxFQUFFLFVBQVU7SUFDbkIsU0FBUyxFQUFFLE1BQU07SUFDakIsZUFBZSxFQUFFLDJCQUEyQjtJQUM1QyxVQUFVLEVBQUUsaUNBQWlDO0lBQzdDLHFCQUFxQixFQUFFLG1DQUFtQztJQUMxRCxhQUFhLEVBQUUsMEJBQTBCO0NBQzFDLENBQUMsQ0FBQztBQXFCSCxNQUFNLDJCQUEyQixHQUE2QyxJQUFJLEdBQUcsQ0FBQztJQUNwRixRQUFRO0lBQ1Isb0JBQW9CO0lBQ3BCLDBCQUEwQjtDQUMzQixDQUFDLENBQUM7QUFFSCxrRUFBa0U7QUFDbEUsU0FBUyxVQUFVLENBQUMsT0FBc0QsRUFBRSxJQUFZO0lBQ3RGLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDeEYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELG9GQUFvRjtBQUNwRixTQUFTLGtCQUFrQixDQUFDLEtBQWM7SUFDeEMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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
@@ -0,0 +1,219 @@
1
+ import { isRecordSaveRequestId, RecordAttachmentCompletionItem, RecordConcurrencyMetadata, RecordConcurrencyResolution, RecordSaveIssue, RecordSaveLifecyclePhase, RecordSaveProblem, RecordSaveProblemKind, RecordSaveResult, RecordSaveOutcome, StorageMutationApplicationState } from '@researchdatabox/sails-ng-common';
2
+ import type { RecordContractCompleteness, RecordContractEnforcement } from './record-contract/types';
3
+ import { StorageMutationResponse, StorageServiceResponse } from './StorageServiceResponse';
4
+ export type RecordSaveRouteFamily = 'browser' | 'api' | 'internal';
5
+ export type RecordSaveOperation = 'create' | 'update' | 'transition' | 'delete' | 'restore' | 'purge';
6
+ export type NormalizedRecordSchemaOperation = string;
7
+ export type RecordValidationContextJSONValue = string | number | boolean | null | readonly RecordValidationContextJSONValue[] | {
8
+ readonly [key: string]: RecordValidationContextJSONValue;
9
+ };
10
+ /** Reasons approved for the narrowly scoped internal validation bypass. */
11
+ export declare const RECORD_VALIDATION_BYPASS_REASONS: readonly ["historical-record-repair", "trusted-data-migration", "configuration-recovery"];
12
+ export type RecordValidationBypassReason = (typeof RECORD_VALIDATION_BYPASS_REASONS)[number];
13
+ export declare function isRecordValidationBypassReason(value: unknown): value is RecordValidationBypassReason;
14
+ /**
15
+ * Deliberately awkward internal-only capability. A string flag is not a
16
+ * bypass: callers must identify the responsible service and use an approved
17
+ * reason so the decision can be durably audited.
18
+ */
19
+ export interface InternalRecordValidationBypass {
20
+ readonly mode: 'bypass';
21
+ readonly reason: RecordValidationBypassReason;
22
+ readonly actor: {
23
+ readonly kind: 'service';
24
+ readonly id: string;
25
+ };
26
+ }
27
+ /** Runtime guard for JavaScript callers crossing the internal capability boundary. */
28
+ export declare function isInternalRecordValidationBypass(value: unknown): value is InternalRecordValidationBypass;
29
+ export interface RecordSaveSchemaOutcomeInput {
30
+ readonly digest: string;
31
+ readonly immutableUrl: string;
32
+ readonly completeness: RecordContractCompleteness;
33
+ readonly enforcement: RecordContractEnforcement;
34
+ }
35
+ export type RecordSaveSchemaOutcomeMetadata = Readonly<RecordSaveSchemaOutcomeInput>;
36
+ export interface RecordSaveContext {
37
+ readonly requestId: string;
38
+ readonly routeFamily?: RecordSaveRouteFamily;
39
+ readonly operation?: RecordSaveOperation;
40
+ /** Factory-normalized portal copied from the server-owned matched request context. */
41
+ readonly portal?: string;
42
+ /** Server-owned workflow target copied from the matched route, not inferred from a resolved step object. */
43
+ readonly targetStep?: string;
44
+ /** Server-owned business intent; never conflated with the CRUD operation. */
45
+ readonly validationOperation?: string;
46
+ /** Factory-normalized operation shared by schema resolution and the existing validator phase. */
47
+ readonly schemaOperation?: NormalizedRecordSchemaOperation;
48
+ /** Raw schema ETag precondition copied only from a trusted transport header. */
49
+ readonly ifMatch?: string;
50
+ /** Explicit, JSON-only request facts; the validation config allowlist narrows these again. */
51
+ readonly validationRequestParameters?: Readonly<Record<string, RecordValidationContextJSONValue>>;
52
+ /** Server-owned, JSON-only execution facts. Never place sessions, headers, or tokens here. */
53
+ readonly validationRuntimeContext?: Readonly<Record<string, RecordValidationContextJSONValue>>;
54
+ /** Accepted only when routeFamily is explicitly `internal`. */
55
+ readonly validationBypass?: InternalRecordValidationBypass;
56
+ /** Trusted transport-neutral optimistic-concurrency facts. */
57
+ readonly concurrency?: RecordConcurrencyContext;
58
+ }
59
+ /** Trusted values accepted by the save-context factory. */
60
+ export interface RecordSaveContextOptions {
61
+ readonly requestId?: string;
62
+ readonly routeFamily?: RecordSaveRouteFamily;
63
+ readonly operation?: RecordSaveOperation;
64
+ /** Server-owned portal selected by the trusted transport adapter. */
65
+ readonly portal?: string;
66
+ readonly targetStep?: string;
67
+ readonly validationOperation?: string;
68
+ readonly validationRequestParameters?: Readonly<Record<string, RecordValidationContextJSONValue>>;
69
+ readonly validationRuntimeContext?: Readonly<Record<string, RecordValidationContextJSONValue>>;
70
+ readonly validationBypass?: InternalRecordValidationBypass;
71
+ /** Trusted transport-neutral optimistic-concurrency facts. */
72
+ readonly concurrency?: unknown;
73
+ /** Trusted transport adaptation for the raw If-Match header. */
74
+ readonly recordSchemaIfMatch?: string;
75
+ }
76
+ /** Runtime counterpart to the nominal context type for JavaScript/service boundaries. */
77
+ export declare function isRecordSaveContext(value: unknown): value is RecordSaveContext;
78
+ /** Validate and brand the schema identity exposed by a completed save. */
79
+ export declare function createRecordSaveSchemaOutcomeMetadata(metadata: unknown): RecordSaveSchemaOutcomeMetadata;
80
+ /**
81
+ * Normalized concurrency facts supplied by a controller or trusted internal
82
+ * helper. Raw requests, headers, users, and record candidates must not cross
83
+ * this boundary.
84
+ */
85
+ export interface RecordConcurrencyContext {
86
+ readonly expectedRevision?: number;
87
+ readonly entityTagSupplied: boolean;
88
+ readonly formFingerprint?: string;
89
+ readonly resolution?: RecordConcurrencyResolution;
90
+ /** Diagnostic linkage only; this is not an idempotency key. */
91
+ readonly resolutionOfRequestId?: string;
92
+ }
93
+ export declare const RECORD_VALIDATION_REQUEST_FACT_NAMES: readonly ["recordType", "targetStep", "merge", "datastreams"];
94
+ /**
95
+ * Project the same bounded request facts for browser and API transports.
96
+ * Sources are checked in order and accessors are never invoked.
97
+ */
98
+ export declare function normalizeRecordValidationRequestFacts(...sources: readonly unknown[]): Readonly<Record<string, RecordValidationContextJSONValue>>;
99
+ /** Shared transport-neutral runtime facts; public callers cannot add objects. */
100
+ export declare function recordValidationRuntimeFacts(context: Pick<RecordSaveContext, 'routeFamily' | 'operation' | 'validationRuntimeContext'>, writeKind: RecordSaveOperation): Readonly<Record<string, RecordValidationContextJSONValue>>;
101
+ export type PublicValidationOperationParseResult = {
102
+ readonly valid: true;
103
+ readonly value?: string;
104
+ } | {
105
+ readonly valid: false;
106
+ };
107
+ /** Narrow and trim the public operation field before it enters save context. */
108
+ export declare function parsePublicValidationOperation(value: unknown): PublicValidationOperationParseResult;
109
+ /** A typed response for record metadata save operations. */
110
+ export declare class RecordSaveResponse extends StorageServiceResponse implements RecordSaveResult {
111
+ #private;
112
+ outcome: RecordSaveOutcome;
113
+ problems: RecordSaveProblem[];
114
+ completion: import("@researchdatabox/sails-ng-common").RecordSaveCompletion;
115
+ requestId: string;
116
+ readonly context: RecordSaveContext;
117
+ concurrency?: RecordConcurrencyMetadata;
118
+ /** Safe schema identity/result facts; never part of the stored record payload. */
119
+ readonly schemaOutcome?: RecordSaveSchemaOutcomeMetadata;
120
+ /** Legacy API v1 fields populated by the RDMP workspace post-save hook. */
121
+ workspaceOid?: string;
122
+ workspaceData?: unknown;
123
+ constructor(context?: RecordSaveContext | string);
124
+ /** True when the primary metadata mutation is known to have been applied. */
125
+ wasPersisted(): boolean;
126
+ /** True only when all required awaited save phases completed. */
127
+ isComplete(): boolean;
128
+ addProblem(problem: RecordSaveProblem): void;
129
+ setAttachmentItems(items: readonly RecordAttachmentCompletionItem[]): void;
130
+ setProjectedMetadata(metadata: Record<string, unknown> | null): void;
131
+ /** Retain only bounded server-owned concurrency diagnostics. */
132
+ setConcurrencyMetadata(metadata: unknown): void;
133
+ /** Compatibility view used by save-pipeline code while the response owns its state directly. */
134
+ get result(): RecordSaveResponse;
135
+ confirmPrimaryPersistence(oid: string, source?: StorageServiceResponse): void;
136
+ recordPrimaryNotApplied(problem?: RecordSaveProblem): void;
137
+ recordPrimaryUnknown(problem?: RecordSaveProblem): void;
138
+ recordPostPersistenceProblem(problem: RecordSaveProblem): void;
139
+ recordWarning(problem: RecordSaveProblem): void;
140
+ mergeLegacyHookFields(source: unknown): void;
141
+ toResponse(): RecordSaveResponse;
142
+ setSchemaOutcome(metadata: RecordSaveSchemaOutcomeInput): void;
143
+ /**
144
+ * A persisted save can only ever move from `saved` to `saved-with-warnings`.
145
+ * Non-persisted outcomes are left untouched so a later warning cannot
146
+ * manufacture a commit that never happened.
147
+ */
148
+ private downgradeCompleteSave;
149
+ private recordPrimaryFailure;
150
+ }
151
+ /**
152
+ * Small state owner used by RecordsService. Callers cannot accidentally
153
+ * downgrade a confirmed commit while handling a later warning.
154
+ */
155
+ export declare class RecordSaveTracker {
156
+ readonly context: RecordSaveContext;
157
+ private readonly response;
158
+ constructor(context: RecordSaveContext);
159
+ get result(): RecordSaveResponse;
160
+ confirmPrimaryPersistence(oid: string, source?: StorageServiceResponse): void;
161
+ recordPrimaryNotApplied(problem?: RecordSaveProblem): void;
162
+ recordPrimaryUnknown(problem?: RecordSaveProblem): void;
163
+ recordPostPersistenceProblem(problem: RecordSaveProblem): void;
164
+ /** Track a nonblocking warning before or after the primary commit. */
165
+ recordWarning(problem: RecordSaveProblem): void;
166
+ setAttachmentItems(items: readonly RecordAttachmentCompletionItem[]): void;
167
+ setProjectedMetadata(metadata: Record<string, unknown> | null): void;
168
+ setConcurrencyMetadata(metadata: unknown): void;
169
+ setSchemaOutcome(metadata: RecordSaveSchemaOutcomeInput): void;
170
+ /** Preserve the narrowly scoped legacy fields without exposing tracked save state to hooks. */
171
+ mergeLegacyHookFields(source: unknown): void;
172
+ /** A detached copy, so callers cannot mutate tracked state after the fact. */
173
+ toResponse(): RecordSaveResponse;
174
+ private recordPrimaryFailure;
175
+ }
176
+ /**
177
+ * One canonical save request-correlation UUID. The format lives in the shared
178
+ * package so browser, controller, and concurrency diagnostics agree.
179
+ */
180
+ export declare const isCanonicalSaveRequestId: typeof isRecordSaveRequestId;
181
+ /** Drop every field outside the bounded server-owned concurrency allowlist. */
182
+ export declare function normalizeRecordConcurrencyContext(value: unknown): RecordConcurrencyContext | undefined;
183
+ export declare function createRecordSaveContext(context?: RecordSaveContextOptions): RecordSaveContext;
184
+ /**
185
+ * Read the client-supplied save request ID from request headers. Node
186
+ * lower-cases incoming header names, and anything that is not a single
187
+ * canonical UUID is replaced by a server-generated value.
188
+ */
189
+ export declare function readSaveRequestId(headers: Record<string, unknown> | undefined): string | undefined;
190
+ export declare function isRecordConflictStatus(status: number): boolean;
191
+ /**
192
+ * HTTP status for a save that did not persist. Persisted outcomes never
193
+ * reach here: once primary metadata is applied the route family decides the
194
+ * success status and the warnings travel in the typed result.
195
+ */
196
+ export declare function recordSaveFailureStatus(result: Pick<RecordSaveResult, 'outcome' | 'problems'> | null | undefined): number;
197
+ export interface RecordSaveDisplayError {
198
+ readonly code?: string;
199
+ readonly title?: string;
200
+ readonly detail?: string;
201
+ readonly source?: {
202
+ readonly pointer?: string;
203
+ };
204
+ }
205
+ /**
206
+ * Project only the safe issue contract into the v2 JSON:API error array. The
207
+ * complete typed result remains in `meta`; raw exceptions and candidates are
208
+ * never used to infer a conflict.
209
+ */
210
+ export declare function recordSaveDisplayErrors(result: Pick<RecordSaveResult, 'problems'> | null | undefined, fallbackDetail: string): RecordSaveDisplayError[];
211
+ export type StorageMutationLogger = (message: string, details?: Record<string, unknown>) => void;
212
+ /**
213
+ * Normalize old and new adapter responses at one boundary. Legacy success
214
+ * is trusted temporarily for compatibility; legacy false is ambiguous
215
+ * because a failed call is not proof that nothing was written.
216
+ */
217
+ export declare function resolveStorageMutationState(response: StorageServiceResponse | StorageMutationResponse | null | undefined, logDeprecation?: StorageMutationLogger): StorageMutationApplicationState;
218
+ export declare function recordSaveProblem(kind: RecordSaveProblemKind, phase: RecordSaveLifecyclePhase, message: string, code?: string, issue?: Partial<RecordSaveIssue>): RecordSaveProblem;
219
+ //# sourceMappingURL=RecordSaveResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordSaveResponse.d.ts","sourceRoot":"","sources":["../src/RecordSaveResponse.ts"],"names":[],"mappings":"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"}