@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,48 @@
1
+ import { type RecordConcurrencyResolution, type RecordConcurrentModificationMode } from '@researchdatabox/sails-ng-common';
2
+ import { type DeletedRecordLifecycleState } from './model/storage/DeletedRecordModel';
3
+ /**
4
+ * First server-owned revision assigned to a newly-created or legacy record.
5
+ *
6
+ * Clients must treat revisions and entity tags as opaque concurrency tokens;
7
+ * they must not depend on this numeric starting value.
8
+ */
9
+ export declare const INITIAL_RECORD_REVISION: 0;
10
+ export declare const RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION: 1;
11
+ export interface RecordMutationPrecondition {
12
+ expectedRevision?: number;
13
+ requireRevision: boolean;
14
+ }
15
+ export interface RecordStorageMutationOptions {
16
+ precondition?: RecordMutationPrecondition;
17
+ /** Correlation only; never an idempotency key. */
18
+ requestId?: string;
19
+ /** Diagnostic only; never relaxes persistence or authorization checks. */
20
+ resolution?: RecordConcurrencyResolution;
21
+ /** Additional durable ownership predicates for lifecycle recovery CAS. */
22
+ lifecycle?: {
23
+ expectedState?: DeletedRecordLifecycleState;
24
+ operationId?: string;
25
+ };
26
+ }
27
+ export type StorageMutationNonApplicationReason = 'stale-revision' | 'not-found' | 'brand-mismatch' | 'deleted' | 'lifecycle-conflict' | 'capability-unavailable';
28
+ export interface StorageServiceCapabilities {
29
+ /** Versioned token for the complete strict record-concurrency contract. */
30
+ recordConcurrency?: typeof RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION;
31
+ }
32
+ export interface StorageCapabilityProvider {
33
+ getCapabilities?: () => StorageServiceCapabilities;
34
+ }
35
+ export declare function hasFullRecordStorageConcurrencyCapability(service: StorageCapabilityProvider | null | undefined): boolean;
36
+ /** Safe fail-closed error used at startup and at every strict runtime lookup. */
37
+ export declare class RecordConcurrencyCapabilityError extends Error {
38
+ readonly code: "record-concurrency-capability-unavailable";
39
+ constructor();
40
+ }
41
+ export declare function assertFullRecordStorageConcurrencyCapability(service: StorageCapabilityProvider | null | undefined): asserts service is StorageCapabilityProvider & {
42
+ getCapabilities: () => StorageServiceCapabilities;
43
+ };
44
+ /** Runtime policy boundary: permissive modes remain source-compatible. */
45
+ export declare function assertStorageConcurrencyCapabilityForMode(mode: RecordConcurrentModificationMode, service: StorageCapabilityProvider | null | undefined): void;
46
+ export declare function nextRecordRevision(revision: number): number;
47
+ export declare function normalizeRecordStorageMutationOptions(value: RecordStorageMutationOptions | undefined): RecordStorageMutationOptions | undefined;
48
+ //# sourceMappingURL=RecordStorageConcurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordStorageConcurrency.d.ts","sourceRoot":"","sources":["../src/RecordStorageConcurrency.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACtC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAiC,KAAK,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAErH;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAG,CAAU,CAAC;AAElD,eAAO,MAAM,6CAA6C,EAAG,CAAU,CAAC;AAExE,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,2BAA2B,CAAC;IACzC,0EAA0E;IAC1E,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,2BAA2B,CAAC;QAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,MAAM,mCAAmC,GAC3C,gBAAgB,GAChB,WAAW,GACX,gBAAgB,GAChB,SAAS,GACT,oBAAoB,GACpB,wBAAwB,CAAC;AAE7B,MAAM,WAAW,0BAA0B;IACzC,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,6CAA6C,CAAC;CAC1E;AAED,MAAM,WAAW,yBAAyB;IACxC,eAAe,CAAC,EAAE,MAAM,0BAA0B,CAAC;CACpD;AAED,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GACpD,OAAO,CAUT;AAED,iFAAiF;AACjF,qBAAa,gCAAiC,SAAQ,KAAK;IACzD,SAAgB,IAAI,EAAG,2CAA2C,CAAU;;CAM7E;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GACpD,OAAO,CAAC,OAAO,IAAI,yBAAyB,GAAG;IAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;CAAE,CAItG;AAED,0EAA0E;AAC1E,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,gCAAgC,EACtC,OAAO,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GACpD,IAAI,CAIN;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,4BAA4B,GAAG,SAAS,GAC9C,4BAA4B,GAAG,SAAS,CAgD1C"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecordConcurrencyCapabilityError = exports.RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION = exports.INITIAL_RECORD_REVISION = void 0;
4
+ exports.hasFullRecordStorageConcurrencyCapability = hasFullRecordStorageConcurrencyCapability;
5
+ exports.assertFullRecordStorageConcurrencyCapability = assertFullRecordStorageConcurrencyCapability;
6
+ exports.assertStorageConcurrencyCapabilityForMode = assertStorageConcurrencyCapabilityForMode;
7
+ exports.nextRecordRevision = nextRecordRevision;
8
+ exports.normalizeRecordStorageMutationOptions = normalizeRecordStorageMutationOptions;
9
+ const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
10
+ const DeletedRecordModel_1 = require("./model/storage/DeletedRecordModel");
11
+ /**
12
+ * First server-owned revision assigned to a newly-created or legacy record.
13
+ *
14
+ * Clients must treat revisions and entity tags as opaque concurrency tokens;
15
+ * they must not depend on this numeric starting value.
16
+ */
17
+ exports.INITIAL_RECORD_REVISION = 0;
18
+ exports.RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION = 1;
19
+ function hasFullRecordStorageConcurrencyCapability(service) {
20
+ if (!service || typeof service.getCapabilities !== 'function') {
21
+ return false;
22
+ }
23
+ try {
24
+ return service.getCapabilities()?.recordConcurrency === exports.RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ }
30
+ /** Safe fail-closed error used at startup and at every strict runtime lookup. */
31
+ class RecordConcurrencyCapabilityError extends Error {
32
+ code = 'record-concurrency-capability-unavailable';
33
+ constructor() {
34
+ super('The configured storage adapter cannot provide atomic record revision mutations required by strict mode.');
35
+ this.name = 'RecordConcurrencyCapabilityError';
36
+ }
37
+ }
38
+ exports.RecordConcurrencyCapabilityError = RecordConcurrencyCapabilityError;
39
+ function assertFullRecordStorageConcurrencyCapability(service) {
40
+ if (!hasFullRecordStorageConcurrencyCapability(service)) {
41
+ throw new RecordConcurrencyCapabilityError();
42
+ }
43
+ }
44
+ /** Runtime policy boundary: permissive modes remain source-compatible. */
45
+ function assertStorageConcurrencyCapabilityForMode(mode, service) {
46
+ if (mode === 'strict') {
47
+ assertFullRecordStorageConcurrencyCapability(service);
48
+ }
49
+ }
50
+ function nextRecordRevision(revision) {
51
+ if (!(0, sails_ng_common_1.isRecordRevision)(revision) || revision >= sails_ng_common_1.RECORD_REVISION_MAX) {
52
+ throw new RangeError('Record revision cannot be advanced safely.');
53
+ }
54
+ return revision + 1;
55
+ }
56
+ function normalizeRecordStorageMutationOptions(value) {
57
+ if (!value) {
58
+ return undefined;
59
+ }
60
+ const normalized = {};
61
+ if (value.precondition) {
62
+ if (typeof value.precondition !== 'object' ||
63
+ Array.isArray(value.precondition) ||
64
+ typeof value.precondition.requireRevision !== 'boolean') {
65
+ throw new TypeError('Record mutation precondition is malformed.');
66
+ }
67
+ if ((value.precondition.expectedRevision !== undefined && !(0, sails_ng_common_1.isRecordRevision)(value.precondition.expectedRevision)) ||
68
+ (value.precondition.requireRevision === true && !(0, sails_ng_common_1.isRecordRevision)(value.precondition.expectedRevision))) {
69
+ throw new TypeError('Record mutation precondition contains an invalid revision.');
70
+ }
71
+ normalized.precondition = {
72
+ requireRevision: value.precondition.requireRevision === true,
73
+ ...((0, sails_ng_common_1.isRecordRevision)(value.precondition.expectedRevision)
74
+ ? { expectedRevision: value.precondition.expectedRevision }
75
+ : {}),
76
+ };
77
+ }
78
+ if ((0, sails_ng_common_1.isRecordSaveRequestId)(value.requestId))
79
+ normalized.requestId = value.requestId;
80
+ if ((0, sails_ng_common_1.isRecordConcurrencyResolution)(value.resolution))
81
+ normalized.resolution = value.resolution;
82
+ if (value.lifecycle) {
83
+ if (typeof value.lifecycle !== 'object' || Array.isArray(value.lifecycle)) {
84
+ throw new TypeError('Record lifecycle precondition is malformed.');
85
+ }
86
+ const expectedState = (0, DeletedRecordModel_1.isDeletedRecordLifecycleState)(value.lifecycle.expectedState)
87
+ ? value.lifecycle.expectedState
88
+ : undefined;
89
+ const operationId = (0, sails_ng_common_1.isRecordSaveRequestId)(value.lifecycle.operationId) ? value.lifecycle.operationId : undefined;
90
+ if (value.lifecycle.expectedState !== undefined && expectedState === undefined) {
91
+ throw new TypeError('Record lifecycle precondition contains an invalid state.');
92
+ }
93
+ if (value.lifecycle.operationId !== undefined && operationId === undefined) {
94
+ throw new TypeError('Record lifecycle precondition contains an invalid operation identity.');
95
+ }
96
+ normalized.lifecycle = {
97
+ ...(expectedState ? { expectedState } : {}),
98
+ ...(operationId ? { operationId } : {}),
99
+ };
100
+ }
101
+ return normalized;
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkU3RvcmFnZUNvbmN1cnJlbmN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JlY29yZFN0b3JhZ2VDb25jdXJyZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1REEsOEZBWUM7QUFZRCxvR0FNQztBQUdELDhGQU9DO0FBRUQsZ0RBS0M7QUFFRCxzRkFrREM7QUExSkQsc0VBTzBDO0FBQzFDLDJFQUFxSDtBQUVySDs7Ozs7R0FLRztBQUNVLFFBQUEsdUJBQXVCLEdBQUcsQ0FBVSxDQUFDO0FBRXJDLFFBQUEsNkNBQTZDLEdBQUcsQ0FBVSxDQUFDO0FBcUN4RSxTQUFnQix5Q0FBeUMsQ0FDdkQsT0FBcUQ7SUFFckQsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sQ0FBQyxlQUFlLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDOUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsaUJBQWlCLEtBQUsscURBQTZDLENBQUM7SUFDeEcsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxpRkFBaUY7QUFDakYsTUFBYSxnQ0FBaUMsU0FBUSxLQUFLO0lBQ3pDLElBQUksR0FBRywyQ0FBb0QsQ0FBQztJQUU1RTtRQUNFLEtBQUssQ0FBQyx5R0FBeUcsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxJQUFJLEdBQUcsa0NBQWtDLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBUEQsNEVBT0M7QUFFRCxTQUFnQiw0Q0FBNEMsQ0FDMUQsT0FBcUQ7SUFFckQsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxJQUFJLGdDQUFnQyxFQUFFLENBQUM7SUFDL0MsQ0FBQztBQUNILENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsU0FBZ0Is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
@@ -0,0 +1,12 @@
1
+ type AnyRecord = Record<string, unknown>;
2
+ export type RecordWriteClassification = 'record-metadata' | 'form-relevant-object-metadata' | 'authorization-only' | 'non-form-system-metadata' | 'no-change';
3
+ /**
4
+ * Classify a complete before/after record pair at the RecordsService boundary.
5
+ * User form data takes precedence, followed by form-resolution inputs. Pure
6
+ * authorization and unrelated system-object changes intentionally skip form
7
+ * validation, but remain ordinary persistence operations.
8
+ */
9
+ export declare function classifyRecordWrite(before: Readonly<AnyRecord>, after: Readonly<AnyRecord>): RecordWriteClassification;
10
+ export declare function recordWriteRequiresFormValidation(classification: RecordWriteClassification): boolean;
11
+ export {};
12
+ //# sourceMappingURL=RecordWriteClassification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordWriteClassification.d.ts","sourceRoot":"","sources":["../src/RecordWriteClassification.ts"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzC,MAAM,MAAM,yBAAyB,GACjC,iBAAiB,GACjB,+BAA+B,GAC/B,oBAAoB,GACpB,0BAA0B,GAC1B,WAAW,CAAC;AAmDhB;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC3B,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,GACzB,yBAAyB,CAS3B;AAED,wBAAgB,iCAAiC,CAAC,cAAc,EAAE,yBAAyB,GAAG,OAAO,CAEpG"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifyRecordWrite = classifyRecordWrite;
4
+ exports.recordWriteRequiresFormValidation = recordWriteRequiresFormValidation;
5
+ const lodash_1 = require("lodash");
6
+ const AUTHORIZATION_KEYS = [
7
+ 'authorization',
8
+ 'authorization_edit',
9
+ 'authorization_view',
10
+ 'authorization_editRoles',
11
+ 'authorization_viewRoles',
12
+ 'authorization_editPending',
13
+ 'authorization_viewPending',
14
+ ];
15
+ const FORM_RELEVANT_META_METADATA_KEYS = ['brandId', 'type', 'form'];
16
+ function recordProperty(record, key) {
17
+ const value = record[key];
18
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
19
+ }
20
+ function pick(source, keys) {
21
+ const selected = {};
22
+ for (const key of keys) {
23
+ if (Object.hasOwn(source, key))
24
+ selected[key] = source[key];
25
+ }
26
+ return selected;
27
+ }
28
+ function omit(source, keys) {
29
+ const omitted = new Set(keys);
30
+ return Object.fromEntries(Object.entries(source).filter(([key]) => !omitted.has(key)));
31
+ }
32
+ function formContext(record) {
33
+ return {
34
+ metaMetadata: pick(recordProperty(record, 'metaMetadata'), FORM_RELEVANT_META_METADATA_KEYS),
35
+ workflow: record.workflow,
36
+ previousWorkflow: record.previousWorkflow,
37
+ };
38
+ }
39
+ function authorizationContext(record) {
40
+ return pick(record, AUTHORIZATION_KEYS);
41
+ }
42
+ function nonFormObjectMetadata(record) {
43
+ return {
44
+ ...omit(record, ['metadata', 'metaMetadata', ...AUTHORIZATION_KEYS, 'workflow', 'previousWorkflow']),
45
+ metaMetadata: omit(recordProperty(record, 'metaMetadata'), FORM_RELEVANT_META_METADATA_KEYS),
46
+ };
47
+ }
48
+ /**
49
+ * Classify a complete before/after record pair at the RecordsService boundary.
50
+ * User form data takes precedence, followed by form-resolution inputs. Pure
51
+ * authorization and unrelated system-object changes intentionally skip form
52
+ * validation, but remain ordinary persistence operations.
53
+ */
54
+ function classifyRecordWrite(before, after) {
55
+ if (!(0, lodash_1.isEqual)(before.metadata, after.metadata))
56
+ return 'record-metadata';
57
+ if (!(0, lodash_1.isEqual)(formContext(before), formContext(after)))
58
+ return 'form-relevant-object-metadata';
59
+ const authorizationChanged = !(0, lodash_1.isEqual)(authorizationContext(before), authorizationContext(after));
60
+ const systemMetadataChanged = !(0, lodash_1.isEqual)(nonFormObjectMetadata(before), nonFormObjectMetadata(after));
61
+ if (systemMetadataChanged)
62
+ return 'non-form-system-metadata';
63
+ if (authorizationChanged)
64
+ return 'authorization-only';
65
+ return 'no-change';
66
+ }
67
+ function recordWriteRequiresFormValidation(classification) {
68
+ return classification === 'record-metadata' || classification === 'form-relevant-object-metadata';
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkV3JpdGVDbGFzc2lmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9SZWNvcmRXcml0ZUNsYXNzaWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0VBLGtEQVlDO0FBRUQsOEVBRUM7QUFsRkQsbUNBQWlDO0FBV2pDLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixvQkFBb0I7SUFDcEIseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6QiwyQkFBMkI7SUFDM0IsMkJBQTJCO0NBQ25CLENBQUM7QUFFWCxNQUFNLGdDQUFnQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQVUsQ0FBQztBQUU5RSxTQUFTLGNBQWMsQ0FBQyxNQUEyQixFQUFFLEdBQVc7SUFDOUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsTUFBMkIsRUFBRSxJQUF1QjtJQUNoRSxNQUFNLFFBQVEsR0FBYyxFQUFFLENBQUM7SUFDL0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztZQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxNQUEyQixFQUFFLElBQXVCO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLE1BQTJCO0lBQzlDLE9BQU87UUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsZ0NBQWdDLENBQUM7UUFDNUYsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7S0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLE1BQTJCO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLE1BQTJCO0lBQ3hELE9BQU87UUFDTCxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDcEcsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUFFLGdDQUFnQyxDQUFDO0tBQzdGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsTUFBMkIsRUFDM0IsS0FBMEI7SUFFMUIsSUFBSSxDQUFDLElBQUEsZ0JBQU8sRUFBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLGlCQUFpQixDQUFDO0lBQ3hFLElBQUksQ0FBQyxJQUFBLGdCQUFPLEVBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sK0JBQStCLENBQUM7SUFFOUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQUEsZ0JBQU8sRUFBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFBLGdCQUFPLEVBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRyxJQUFJLHFCQUFxQjtRQUFFLE9BQU8sMEJBQTBCLENBQUM7SUFDN0QsSUFBSSxvQkFBb0I7UUFBRSxPQUFPLG9CQUFvQixDQUFDO0lBQ3RELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFnQixpQ0FBaUMsQ0FBQyxjQUF5QztJQUN6RixPQUFPLGNBQWMsS0FBSyxpQkFBaUIsSUFBSSxjQUFjLEtBQUssK0JBQStCLENBQUM7QUFDcEcsQ0FBQyJ9
@@ -1,10 +1,61 @@
1
- import StorageServiceResponse from "./StorageServiceResponse";
1
+ import StorageServiceResponse from './StorageServiceResponse';
2
2
  import { DatastreamRequestContext } from './DatastreamService';
3
- import { RecordModel, UserModel } from "./model";
4
- import { NormalizedRecordRelation } from "./config/recordtype.config";
3
+ import { DeletedRecordModel, RecordModel, UserModel } from './model';
4
+ import type { FormAttributes } from './waterline-models';
5
+ import { NormalizedRecordRelation } from './config/recordtype.config';
6
+ import type { RecordSaveContext, RecordSaveResponse } from './RecordSaveResponse';
5
7
  type AnyRecord = Record<string, unknown>;
6
8
  type RecordInput = RecordModel | Record<string, unknown>;
7
9
  type UserInput = UserModel | Record<string, unknown>;
10
+ export interface InternalRecordWriterIdentity {
11
+ readonly kind: 'service';
12
+ readonly id: string;
13
+ }
14
+ export type InternalRecordMutationAuthorization = {
15
+ readonly kind: 'service';
16
+ } | {
17
+ readonly kind: 'record-edit';
18
+ };
19
+ export type InternalRecordSnapshotMutationClass = 'full-record' | 'transition' | 'external-side-effect';
20
+ export interface InternalRecordSnapshotSaveOptions {
21
+ readonly actor: InternalRecordWriterIdentity;
22
+ readonly authorization: InternalRecordMutationAuthorization;
23
+ readonly mutationClass: InternalRecordSnapshotMutationClass;
24
+ readonly oid: string;
25
+ /** Candidate derived from the authoritative snapshot whose revision it still carries. */
26
+ readonly record: RecordInput;
27
+ readonly brand?: unknown;
28
+ readonly user?: UserInput;
29
+ readonly triggerPreSaveTriggers?: boolean;
30
+ readonly triggerPostSaveTriggers?: boolean;
31
+ readonly targetStep?: unknown;
32
+ readonly metadata?: AnyRecord;
33
+ readonly metadataMode?: 'merge' | 'replace' | 'pre-applied';
34
+ readonly operation?: 'update' | 'transition';
35
+ /** Trusted transport schema facts to retain while concurrency remains internal and revision-based. */
36
+ readonly context?: RecordSaveContext;
37
+ /** Diagnostic causation only; never an idempotency key. */
38
+ readonly causedByRequestId?: string;
39
+ }
40
+ export interface InternalRecomputableMutationRetry {
41
+ readonly idempotent: true;
42
+ readonly recomputable: true;
43
+ /** Includes the first attempt and is capped by the core service. */
44
+ readonly maxAttempts: number;
45
+ }
46
+ export interface InternalRecomputableMutationOptions {
47
+ readonly actor: InternalRecordWriterIdentity;
48
+ readonly authorization: InternalRecordMutationAuthorization;
49
+ readonly oid: string;
50
+ readonly brand?: unknown;
51
+ readonly user?: UserInput;
52
+ /** Must be synchronous and side-effect-free; it is rerun from each freshly loaded snapshot. */
53
+ readonly mutate: (authoritativeSnapshot: RecordModel) => RecordInput;
54
+ readonly retry?: InternalRecomputableMutationRetry;
55
+ readonly triggerPreSaveTriggers?: boolean;
56
+ readonly triggerPostSaveTriggers?: boolean;
57
+ readonly causedByRequestId?: string;
58
+ }
8
59
  export type ResolvedPermissionUser = {
9
60
  username: string;
10
61
  name: string;
@@ -51,6 +102,28 @@ export interface RecordTypeLookupSummary {
51
102
  searchable: boolean;
52
103
  relatedTo?: NormalizedRecordRelation[];
53
104
  }
105
+ export interface AppliedRecordMetadataSubmission {
106
+ readonly metadata: Record<string, unknown>;
107
+ readonly mode: 'merge' | 'replace';
108
+ readonly arrayMergeMode?: 'concat' | 'replace';
109
+ }
110
+ /**
111
+ * A raw metadata delta whose mutation is already present on the caller-owned
112
+ * record. This keeps legacy internal write-back behavior while still routing
113
+ * the untouched structural input through record-schema validation.
114
+ */
115
+ export interface PreAppliedRecordMetadataSubmission {
116
+ readonly metadata: Record<string, unknown>;
117
+ readonly mode: 'pre-applied';
118
+ }
119
+ export type RecordMetadataSubmission = AppliedRecordMetadataSubmission | PreAppliedRecordMetadataSubmission;
120
+ /**
121
+ * Build a detached structural delta from a legacy in-place metadata mutation.
122
+ * Arrays and scalar values remain replacements; unchanged sibling fields are
123
+ * omitted. Removed keys use the JSON Merge Patch `null` deletion marker so a
124
+ * structural validator observes deletions instead of receiving an empty delta.
125
+ */
126
+ export declare function createRecordMetadataDelta(previousMetadata: unknown, updatedMetadata: unknown): Record<string, unknown>;
54
127
  /**
55
128
  * Service interface for Records operations.
56
129
  * Note: This interface uses `unknown` types extensively for backward compatibility.
@@ -60,25 +133,45 @@ export interface RecordsService {
60
133
  triggerPreSaveTriggers(oid: string, record: RecordInput, recordType: Record<string, unknown>, mode: string, user: UserInput): Promise<RecordInput>;
61
134
  triggerPostSaveTriggers(oid: string, record: RecordInput, recordType: Record<string, unknown>, mode: string, user: UserInput): void;
62
135
  triggerPostSaveSyncTriggers(oid: string, record: AnyRecord, recordType: unknown, mode: string, user: Record<string, unknown>, response: unknown): unknown;
136
+ hasCreateAccess(brand: unknown, user: UserInput, roles: AnyRecord[], recordTypeName: string, workflowStepName: string): Promise<boolean>;
63
137
  hasEditAccess(brand: unknown, user: UserInput, roles: AnyRecord[], record: RecordInput): boolean;
64
- hasViewAccess(brand: unknown, user: UserInput, roles: AnyRecord[], record: RecordInput): boolean;
65
- appendToRecord(targetRecordOid: string, linkData: AnyRecord, fieldName: string, fieldType: string, targetRecord: RecordInput): Promise<unknown>;
138
+ hasTransitionRoleAuthorization(step: unknown, user: UserInput): boolean;
139
+ hasViewAccess(brand: unknown, user: UserInput, roles: object[], record: RecordInput): boolean;
140
+ appendToRecord(targetRecordOid: string, linkData: unknown, fieldName: string, fieldType?: string, targetRecord?: RecordInput, initiatingUser?: UserInput): Promise<unknown>;
141
+ removeFromRecord(targetRecordOid: string, dataToRemove: unknown, fieldName: string, targetRecord?: RecordInput, initiatingUser?: UserInput): Promise<unknown>;
66
142
  setWorkflowStepRelatedMetadata(currentRec: RecordInput, nextStep: AnyRecord): void;
67
143
  transitionWorkflowStepMetadata(currentRec: RecordInput, nextStep: AnyRecord): void;
68
144
  triggerPreSaveTransitionWorkflowTriggers(oid: string, record: RecordInput, recordType: Record<string, unknown>, nextStep: AnyRecord, user: Record<string, unknown>): Promise<RecordInput>;
69
145
  triggerPostSaveTransitionWorkflowTriggers(oid: string, record: RecordInput, recordType: unknown, nextStep: AnyRecord, user: Record<string, unknown>, response: unknown): unknown;
70
146
  getAttachments(oid: string, labelFilterStr?: string, requestContext?: DatastreamRequestContext): Promise<Record<string, unknown>[]>;
147
+ cleanupAbandonedAttachmentStaging(now?: Date): Promise<{
148
+ claimed: number;
149
+ removed: number;
150
+ retained: number;
151
+ failed: number;
152
+ }>;
71
153
  getDeletedRecords(workflowState: unknown, recordType: unknown, start: unknown, rows: unknown, username: unknown, roles: AnyRecord[], brand: unknown, editAccessOnly: unknown, packageType: unknown, sort: unknown, fieldNames?: unknown, filterString?: unknown, filterMode?: unknown): Promise<StorageServiceResponse>;
72
- getDeletedRecordMeta(oid: string): Promise<RecordModel | null>;
73
154
  getRecords(workflowState: unknown, recordType: unknown, start: unknown, rows: unknown, username: unknown, roles: AnyRecord[], brand: unknown, editAccessOnly: unknown, packageType: unknown, sort: unknown, fieldNames?: unknown, filterString?: unknown, filterMode?: unknown, secondarySort?: unknown): Promise<StorageServiceResponse>;
74
- create(brand: unknown, record: RecordInput, recordType: unknown, user?: UserInput, triggerPreSaveTriggers?: boolean, triggerPostSaveTriggers?: boolean, targetStep?: unknown): Promise<StorageServiceResponse>;
75
- updateMeta(brand: unknown, oid: string, record: RecordInput, user?: UserInput, triggerPreSaveTriggers?: boolean, triggerPostSaveTriggers?: boolean, targetStep?: unknown, metadata?: AnyRecord): Promise<StorageServiceResponse>;
76
- delete(oid: string, permanentlyDelete: boolean, record: RecordInput, recordType: unknown, user: UserInput): Promise<StorageServiceResponse>;
77
- destroyDeletedRecord(oid: unknown, user: UserInput): Promise<StorageServiceResponse>;
155
+ create(brand: unknown, record: RecordInput, recordType: unknown, user?: UserInput, triggerPreSaveTriggers?: boolean, triggerPostSaveTriggers?: boolean, targetStep?: unknown, context?: RecordSaveContext): Promise<RecordSaveResponse>;
156
+ updateMeta(brand: unknown, oid: string, record: RecordInput, user?: UserInput, triggerPreSaveTriggers?: boolean, triggerPostSaveTriggers?: boolean, targetStep?: unknown, submission?: RecordMetadataSubmission, context?: RecordSaveContext): Promise<RecordSaveResponse>;
157
+ updateMetaInternal(options: InternalRecordSnapshotSaveOptions): Promise<RecordSaveResponse>;
158
+ mutateMetaInternal(options: InternalRecomputableMutationOptions): Promise<RecordSaveResponse>;
159
+ delete(oid: string, permanentlyDelete: boolean, record: RecordInput, recordType: unknown, user: UserInput, context?: RecordSaveContext): Promise<RecordSaveResponse>;
160
+ destroyDeletedRecord(oid: unknown, user: UserInput, brand?: unknown, context?: RecordSaveContext): Promise<RecordSaveResponse>;
78
161
  getMeta(oid: string): Promise<RecordModel>;
162
+ /** The sole authoritative form-contract fingerprint used by form delivery and every save. */
163
+ getRecordFormFingerprint(record: RecordInput, recordType: Record<string, unknown>, sourceForm?: FormAttributes): Promise<string | undefined>;
79
164
  getResolvedPermissionsSummary(oid: string): Promise<ResolvedRecordPermissions>;
80
- restoreRecord(oid: unknown, user: UserInput): Promise<StorageServiceResponse>;
81
- getDeletedRecordMeta(oid: string): Promise<RecordModel | null>;
165
+ restoreRecord(oid: unknown, user: UserInput, brand?: unknown, context?: RecordSaveContext): Promise<RecordSaveResponse>;
166
+ getDeletedRecord(oid: string, brand?: unknown): Promise<DeletedRecordModel | null>;
167
+ getDeletedRecordMeta(oid: string, brand?: unknown): Promise<RecordModel | null>;
168
+ recoverLifecycleOperation(tombstone: DeletedRecordModel): Promise<'completed' | 'cancelled' | 'retained'>;
169
+ recoverLifecycleOperations(limit?: number): Promise<{
170
+ inspected: number;
171
+ completed: number;
172
+ cancelled: number;
173
+ retained: number;
174
+ }>;
82
175
  getRecordAudit(params: unknown): Promise<Record<string, unknown>[]>;
83
176
  getRelatedRecords(oid: unknown, brand: unknown, options?: RecordRelationshipExpandOptions): Promise<RecordRelationshipGraph>;
84
177
  getMetaWithRelationships(oid: string, brand: unknown, options?: RecordRelationshipExpandOptions): Promise<RecordMetaWithRelationships>;
@@ -1 +1 @@
1
- {"version":3,"file":"RecordsService.d.ts","sourceRoot":"","sources":["../src/RecordsService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RecordsService.d.ts","sourceRoot":"","sources":["../src/RecordsService.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3Jkc1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUmVjb3Jkc1NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
3
+ exports.createRecordMetadataDelta = createRecordMetadataDelta;
4
+ const lodash_1 = require("lodash");
5
+ function isMetadataObject(value) {
6
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
7
+ }
8
+ /**
9
+ * Build a detached structural delta from a legacy in-place metadata mutation.
10
+ * Arrays and scalar values remain replacements; unchanged sibling fields are
11
+ * omitted. Removed keys use the JSON Merge Patch `null` deletion marker so a
12
+ * structural validator observes deletions instead of receiving an empty delta.
13
+ */
14
+ function createRecordMetadataDelta(previousMetadata, updatedMetadata) {
15
+ const previous = isMetadataObject(previousMetadata) ? previousMetadata : {};
16
+ const updated = isMetadataObject(updatedMetadata) ? updatedMetadata : {};
17
+ const delta = {};
18
+ const setDeltaValue = (key, value) => {
19
+ Object.defineProperty(delta, key, {
20
+ value,
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ });
25
+ };
26
+ for (const key of new Set([...Object.keys(previous), ...Object.keys(updated)])) {
27
+ const previousDescriptor = Object.getOwnPropertyDescriptor(previous, key);
28
+ const updatedDescriptor = Object.getOwnPropertyDescriptor(updated, key);
29
+ if (updatedDescriptor === undefined) {
30
+ setDeltaValue(key, null);
31
+ continue;
32
+ }
33
+ const previousValue = previousDescriptor?.value;
34
+ const updatedValue = updatedDescriptor.value;
35
+ if (previousDescriptor !== undefined && (0, lodash_1.isEqual)(previousValue, updatedValue))
36
+ continue;
37
+ if (isMetadataObject(previousValue) && isMetadataObject(updatedValue)) {
38
+ const nestedDelta = createRecordMetadataDelta(previousValue, updatedValue);
39
+ setDeltaValue(key, Object.keys(nestedDelta).length > 0 ? nestedDelta : (0, lodash_1.cloneDeep)(updatedValue));
40
+ continue;
41
+ }
42
+ setDeltaValue(key, (0, lodash_1.cloneDeep)(updatedValue));
43
+ }
44
+ return delta;
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3Jkc1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUmVjb3Jkc1NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0SUEsOERBc0NDO0FBakxELG1DQUE0QztBQWlJNUMsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjO0lBQ3RDLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHlCQUF5QixDQUN2QyxnQkFBeUIsRUFDekIsZUFBd0I7SUFFeEIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1RSxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekUsTUFBTSxLQUFLLEdBQTRCLEVBQUUsQ0FBQztJQUMxQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQVEsRUFBRTtRQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDaEMsS0FBSztZQUNMLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0UsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RSxJQUFJLGlCQUFpQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekIsU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBWSxrQkFBa0IsRUFBRSxLQUFLLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQVksaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3RELElBQUksa0JBQWtCLEtBQUssU0FBUyxJQUFJLElBQUEsZ0JBQU8sRUFBQyxhQUFhLEVBQUUsWUFBWSxDQUFDO1lBQUUsU0FBUztRQUV2RixJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDdEUsTUFBTSxXQUFXLEdBQUcseUJBQXlCLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUEsa0JBQVMsRUFBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLFNBQVM7UUFDWCxDQUFDO1FBRUQsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFBLGtCQUFTLEVBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=
@@ -1,6 +1,7 @@
1
1
  import { BrandingModel, RecordModel, RoleModel, UserModel } from "./model";
2
2
  export interface SearchService {
3
- index(id: string, data: RecordModel | Record<string, unknown>): void;
3
+ /** Resolve true only after the index job was accepted or completed inline. */
4
+ index(id: string, data: RecordModel | Record<string, unknown>): Promise<boolean>;
4
5
  searchFuzzy(core: string, recordtype: string, workflowState: string, searchQuery: string, exactSearches: unknown, facetSearches: unknown, brand: BrandingModel, user: UserModel, roles: RoleModel[], returnFields: string[], start?: number, rows?: number): Promise<Record<string, unknown>>;
5
6
  remove(id: string): void;
6
7
  searchAdvanced(core: string, recordtype: string, query: string | URLSearchParams): Promise<Record<string, unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"SearchService.d.ts","sourceRoot":"","sources":["../src/SearchService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9R,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrH"}
1
+ {"version":3,"file":"SearchService.d.ts","sourceRoot":"","sources":["../src/SearchService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9R,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrH"}
@@ -1,33 +1,73 @@
1
1
  import { Readable } from 'node:stream';
2
- import { RecordModel } from './model';
3
- import { StorageServiceResponse } from './StorageServiceResponse';
2
+ import { DeletedRecordModel, RecordModel } from './model';
3
+ import { StorageMutationResponse, StorageServiceResponse } from './StorageServiceResponse';
4
4
  import { RecordRelationshipExpandOptions, RecordRelationshipGraph } from './RecordsService';
5
+ import type { RecordStorageMutationOptions, StorageServiceCapabilities } from './RecordStorageConcurrency';
6
+ import type { RecordSchemaArtifactInput, RecordSchemaArtifactModel, RecordSchemaArtifactQuery, RecordSchemaArtifactSummary, RecordSchemaAuthorizationGrantQuery, RecordSchemaReferenceInput, RecordSchemaReferenceModel, RecordSchemaReferenceQuery } from './model/storage/record-schema';
7
+ export declare const RECORD_SCHEMA_STORAGE_CAPABILITY_METHODS: readonly ["putRecordSchemaArtifact", "getRecordSchemaArtifact", "listRecordSchemaArtifacts", "touchRecordSchemaArtifact", "putRecordSchemaReference", "findRecordSchemaGrantForAuthorization", "listRecordSchemaReferences"];
8
+ export type RecordSchemaStorageCapabilityMethod = (typeof RECORD_SCHEMA_STORAGE_CAPABILITY_METHODS)[number];
5
9
  /**
6
10
  * Service interface for Storage operations.
7
11
  * Note: This interface uses `unknown` types extensively for backward compatibility.
8
12
  * Type safety will be improved incrementally in future phases.
9
13
  */
10
14
  export interface StorageService {
11
- create(brand: unknown, record: unknown, recordType: unknown, user?: unknown): Promise<StorageServiceResponse>;
12
- updateMeta(brand: unknown, oid: unknown, record: unknown, user?: unknown): Promise<StorageServiceResponse>;
15
+ create(brand: unknown, record: unknown, recordType: unknown, user?: unknown, options?: RecordStorageMutationOptions): Promise<StorageMutationResponse>;
16
+ updateMeta(brand: unknown, oid: unknown, record: unknown, user?: unknown, options?: RecordStorageMutationOptions): Promise<StorageMutationResponse>;
17
+ /** An absent declaration is unsupported for strict concurrency. */
18
+ getCapabilities?(): StorageServiceCapabilities;
19
+ /** Atomic active removal primitive used by staged lifecycle orchestration. */
20
+ removeActiveRecord?(brand: unknown, oid: unknown, options?: RecordStorageMutationOptions): Promise<StorageMutationResponse>;
21
+ /** Idempotently persist a durable lifecycle intent before active removal. */
22
+ createTombstone?(brand: unknown, oid: unknown, record: unknown, options?: RecordStorageMutationOptions): Promise<StorageMutationResponse>;
23
+ /** Atomic tombstone claim/update primitive used by restore and purge. */
24
+ updateTombstone?(brand: unknown, oid: unknown, record: unknown, options?: RecordStorageMutationOptions): Promise<StorageMutationResponse>;
25
+ /** Atomic tombstone finalization/removal primitive used by restore and purge. */
26
+ removeTombstone?(brand: unknown, oid: unknown, options?: RecordStorageMutationOptions): Promise<StorageMutationResponse>;
27
+ /** Continue a claimed restore lineage without exposing a caller-selected revision. */
28
+ createActiveRecordFromTombstone?(brand: unknown, oid: unknown, record: unknown, options?: RecordStorageMutationOptions): Promise<StorageMutationResponse>;
29
+ /** Brand-scoped lifecycle wrapper read used by restore, purge, and recovery. */
30
+ getTombstone?(brand: unknown, oid: unknown): Promise<DeletedRecordModel | null>;
31
+ /** Bounded recovery scan; callers still condition every mutation by operation identity. */
32
+ getLifecycleTombstones?(states: readonly string[], limit?: number): Promise<DeletedRecordModel[]>;
13
33
  getMeta(oid: unknown): Promise<RecordModel>;
14
34
  createBatch(type: unknown, data: unknown, harvestIdFldName: unknown): Promise<unknown>;
15
- provideUserAccessAndRemovePendingAccess(oid: unknown, userid: unknown, pendingValue: unknown): void;
35
+ /** @deprecated Whole-record permission rewrites must use RecordsService.mutateMetaInternal(). */
36
+ provideUserAccessAndRemovePendingAccess(oid: unknown, userid: unknown, pendingValue: unknown): Promise<StorageMutationResponse>;
16
37
  getRelatedRecords(oid: unknown, brand: unknown, options?: RecordRelationshipExpandOptions): Promise<RecordRelationshipGraph>;
17
- delete(oid: unknown, permanentlyDelete: unknown): Promise<StorageServiceResponse>;
38
+ /** @deprecated Lifecycle deletion must use RecordsService's staged CAS state machine. */
39
+ delete(oid: unknown, permanentlyDelete: unknown, options?: RecordStorageMutationOptions): Promise<StorageServiceResponse>;
40
+ /** @deprecated Persisted notification writes must use RecordsService.mutateMetaInternal(). */
18
41
  updateNotificationLog(oid: unknown, record: unknown, options: unknown): Promise<unknown>;
19
- restoreRecord(oid: unknown): Promise<StorageServiceResponse>;
20
- destroyDeletedRecord(oid: unknown): Promise<StorageServiceResponse>;
42
+ /** @deprecated Lifecycle deletion must use RecordsService's staged CAS state machine. */
43
+ restoreRecord(oid: unknown, options?: RecordStorageMutationOptions): Promise<StorageServiceResponse>;
44
+ /** @deprecated Lifecycle purge must use RecordsService's staged CAS state machine. */
45
+ destroyDeletedRecord(oid: unknown, options?: RecordStorageMutationOptions): Promise<StorageServiceResponse>;
21
46
  getDeletedRecordMeta(oid: string): Promise<RecordModel | null>;
22
47
  getRecords(workflowState: unknown, recordType: unknown, start: unknown, rows: unknown, username: unknown, roles: unknown, brand: unknown, editAccessOnly: unknown, packageType: unknown, sort: unknown, fieldNames?: unknown, filterString?: unknown, filterMode?: unknown, secondarySort?: unknown): Promise<StorageServiceResponse>;
23
48
  getDeletedRecords(workflowState: unknown, recordType: unknown, start: unknown, rows: unknown, username: unknown, roles: unknown, brand: unknown, editAccessOnly: unknown, packageType: unknown, sort: unknown, fieldNames?: unknown, filterString?: unknown, filterMode?: unknown): Promise<StorageServiceResponse>;
24
49
  getDeletedRecordMeta(oid: unknown): Promise<RecordModel | null>;
25
50
  exportAllPlans(username: unknown, roles: unknown, brand: unknown, format: unknown, modBefore: unknown, modAfter: unknown, recType: unknown): Readable;
51
+ /**
52
+ * Persist an audit synchronously and report whether it was durably applied.
53
+ * Legacy/out-of-tree storage hooks may omit this method; operations requiring
54
+ * durable validation audit then fail closed before record storage.
55
+ */
26
56
  createRecordAudit?(record: unknown): Promise<StorageServiceResponse>;
27
57
  createIntegrationAudit?(record: unknown): Promise<StorageServiceResponse>;
58
+ /** Optional so existing storage hooks remain compatible while record-schema support is disabled. */
59
+ putRecordSchemaArtifact?(artifact: RecordSchemaArtifactInput): Promise<StorageServiceResponse>;
60
+ getRecordSchemaArtifact?(digest: string): Promise<RecordSchemaArtifactModel | null>;
61
+ listRecordSchemaArtifacts?(query: RecordSchemaArtifactQuery): Promise<RecordSchemaArtifactSummary[]>;
62
+ touchRecordSchemaArtifact?(digest: string): Promise<StorageServiceResponse>;
63
+ putRecordSchemaReference?(reference: RecordSchemaReferenceInput): Promise<StorageServiceResponse>;
64
+ findRecordSchemaGrantForAuthorization?(query: RecordSchemaAuthorizationGrantQuery): Promise<RecordSchemaReferenceModel | null>;
65
+ listRecordSchemaReferences?(query: RecordSchemaReferenceQuery): Promise<RecordSchemaReferenceModel[]>;
28
66
  exists(oid: unknown): Promise<boolean>;
29
67
  getRecordAudit(params: unknown): Promise<unknown>;
30
68
  getIntegrationAudit(params: unknown): Promise<unknown>;
31
69
  countIntegrationAudit?(params: unknown): Promise<number>;
32
70
  }
71
+ /** Returns every missing durable schema method in stable capability order. */
72
+ export declare function getMissingRecordSchemaStorageCapabilities(provider: unknown): RecordSchemaStorageCapabilityMethod[];
33
73
  //# sourceMappingURL=StorageService.d.ts.map