@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
@@ -58,9 +58,12 @@ const CoreService_1 = require("../CoreService");
58
58
  const genson_js_1 = require("genson-js");
59
59
  const path = __importStar(require("path"));
60
60
  const vocab_inline_visitor_1 = require("../visitor/vocab-inline.visitor");
61
+ const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
61
62
  const client_visitor_1 = require("../visitor/client.visitor");
62
63
  const construct_visitor_1 = require("../visitor/construct.visitor");
63
64
  const context_variables_visitor_1 = require("../visitor/context-variables.visitor");
65
+ const related_object_data_inline_visitor_1 = require("../visitor/related-object-data-inline.visitor");
66
+ const core_contributors_1 = require("../record-contract/core-contributors");
64
67
  var Services;
65
68
  (function (Services) {
66
69
  /**
@@ -82,30 +85,34 @@ var Services;
82
85
  'generateFormFromSchema',
83
86
  'getFormByStartingWorkflowStep',
84
87
  'buildClientFormConfig',
88
+ 'buildContractFormConfig',
89
+ 'listConfiguredRecordContractForms',
90
+ 'discoverValidationOperations',
91
+ 'toPublicForm',
85
92
  ];
86
93
  async bootstrap(workflowStep, brandingId) {
87
94
  this.logger.verbose(`Bootstrapping form for workflow step: ${workflowStep.id} with form config: ${workflowStep.config.form}`);
88
95
  let form = await Form.find({
89
96
  name: workflowStep.config.form,
90
- branding: brandingId
97
+ branding: brandingId,
91
98
  });
92
99
  if (sails.config.appmode.bootstrapAlways) {
93
100
  this.logger.verbose(`Destroying existing form definitions: ${workflowStep.config.form}`);
94
101
  await Form.destroyOne({
95
102
  name: workflowStep.config.form,
96
- branding: brandingId
103
+ branding: brandingId,
97
104
  });
98
105
  form = null;
99
106
  }
100
107
  let formDefs = [];
101
108
  let formName = null;
102
109
  const formRegistry = this.getFormConfigRegistry();
103
- this.logger.verbose("Form registry: ");
110
+ this.logger.verbose('Form registry: ');
104
111
  this.logger.verbose(JSON.stringify(formRegistry));
105
- this.logger.verbose("Found : ");
112
+ this.logger.verbose('Found : ');
106
113
  this.logger.verbose(form);
107
114
  if (!form || (Array.isArray(form) && form.length == 0)) {
108
- this.logger.verbose("Bootstrapping form definitions..");
115
+ this.logger.verbose('Bootstrapping form definitions..');
109
116
  // only bootstrap the form for this workflow step
110
117
  _.forOwn(formRegistry, (_formDef, formName) => {
111
118
  if (formName == workflowStep.config.form) {
@@ -118,16 +125,16 @@ var Services;
118
125
  formName = firstFormDef ?? null;
119
126
  }
120
127
  else {
121
- this.logger.verbose("Not Bootstrapping form definitions... ");
128
+ this.logger.verbose('Not Bootstrapping form definitions... ');
122
129
  }
123
130
  // check now if the form already exists, if it does, ignore...
124
- const existingFormDef = await Form.find({
131
+ const existingFormDef = (await Form.find({
125
132
  name: formName,
126
- branding: brandingId
127
- });
133
+ branding: brandingId,
134
+ }));
128
135
  const existCheck = {
129
136
  formName: formName,
130
- existingFormDef: existingFormDef
137
+ existingFormDef: existingFormDef,
131
138
  };
132
139
  this.logger.verbose(`Existing form check: ${existCheck.formName}`);
133
140
  this.logger.verbose(JSON.stringify(existCheck));
@@ -138,7 +145,7 @@ var Services;
138
145
  else {
139
146
  this.logger.verbose(`Existing form definition for form name: ${existCheck.existingFormDef[0]?.name}, ignoring bootstrap.`);
140
147
  }
141
- this.logger.verbose("FormName is:");
148
+ this.logger.verbose('FormName is:');
142
149
  this.logger.verbose(formName);
143
150
  let result = null;
144
151
  if (formName) {
@@ -161,11 +168,13 @@ var Services;
161
168
  enabledValidationGroups: formConfigRaw.enabledValidationGroups,
162
169
  validators: formConfigRaw.validators,
163
170
  validationGroups: formConfigRaw.validationGroups,
171
+ validationOperations: formConfigRaw.validationOperations,
164
172
  behaviours: formConfigRaw.behaviours,
165
173
  defaultLayoutComponent: formConfigRaw.defaultLayoutComponent,
166
174
  componentDefinitions: formConfigRaw.componentDefinitions,
167
175
  debugValue: formConfigRaw.debugValue,
168
176
  attachmentFields: (formConfigRaw.attachmentFields ?? []),
177
+ serverSyncOnSave: formConfigRaw.serverSyncOnSave,
169
178
  // Deprecated legacy properties (now removed):
170
179
  // fields → replaced by componentDefinitions
171
180
  // requiredFieldIndicator → removed
@@ -177,17 +186,17 @@ var Services;
177
186
  branding: brandingId,
178
187
  configuration: formConfig,
179
188
  };
180
- result = await Form.create(formObj);
181
- this.logger.verbose("Created form record: ");
189
+ result = (await Form.create(formObj));
190
+ this.logger.verbose('Created form record: ');
182
191
  this.logger.verbose(result);
183
192
  }
184
193
  if (result) {
185
194
  this.logger.verbose(`Updating workflowstep ${workflowStep.id} to form: ${result.id}`);
186
195
  // update the workflow step to reference the form
187
196
  return await WorkflowStep.update({
188
- id: workflowStep.id
197
+ id: workflowStep.id,
189
198
  }).set({
190
- form: result.id
199
+ form: result.id,
191
200
  });
192
201
  }
193
202
  return null;
@@ -205,6 +214,21 @@ var Services;
205
214
  return {};
206
215
  }
207
216
  }
217
+ /**
218
+ * Snapshot every registered form without selecting a record, actor, workflow,
219
+ * or operation. RecordSchemaService owns validation and compilation of these
220
+ * detached candidates during its awaited startup phase.
221
+ */
222
+ listConfiguredRecordContractForms() {
223
+ const reusableFormDefinitions = _.cloneDeep(sails.config.reusableFormDefinitions ?? {});
224
+ return Object.entries(this.getFormConfigRegistry())
225
+ .sort(([left], [right]) => left.localeCompare(right))
226
+ .map(([name, form]) => Object.freeze({
227
+ name,
228
+ form: _.cloneDeep(form),
229
+ reusableFormDefinitions: _.cloneDeep(reusableFormDefinitions),
230
+ }));
231
+ }
208
232
  listForms = (brandingId) => {
209
233
  const query = {};
210
234
  if (brandingId) {
@@ -246,25 +270,156 @@ var Services;
246
270
  ...form,
247
271
  configuration: {
248
272
  ...form.configuration,
249
- type: resolvedRecordType
250
- }
273
+ type: resolvedRecordType,
274
+ },
251
275
  };
252
276
  }
277
+ /**
278
+ * Remove the server-owned operation policy and add only caller-filtered
279
+ * discovery metadata. Nested form configuration is otherwise preserved for
280
+ * compatibility with existing form clients.
281
+ */
282
+ toPublicForm(form, validationOperations) {
283
+ const configuration = form.configuration;
284
+ const { validationOperations: _internalOperations, ...publicConfiguration } = configuration ?? {};
285
+ const safeOperations = validationOperations
286
+ ?.map(operation => (0, sails_ng_common_1.sanitizeValidationOperationDiscovery)(operation))
287
+ .filter((operation) => operation !== undefined);
288
+ return {
289
+ ...form,
290
+ ...(configuration ? { configuration: publicConfiguration } : {}),
291
+ ...(safeOperations
292
+ ? {
293
+ validationOperations: safeOperations,
294
+ }
295
+ : {}),
296
+ };
297
+ }
298
+ /**
299
+ * Discover operations using the same form/type/stage policy resolver as a
300
+ * save, after applying existing record-edit and workflow-transition access.
301
+ * Missing services, actor data, or context fail safely to no operations.
302
+ */
303
+ async discoverValidationOperations(options) {
304
+ if (!options.editable)
305
+ return [];
306
+ const user = (options.user ?? {});
307
+ const username = String(user.username ?? '').trim();
308
+ if (!username)
309
+ return [];
310
+ try {
311
+ const recordsService = sails.services.recordsservice;
312
+ const validationService = sails.services.recordvalidationservice;
313
+ if (!recordsService ||
314
+ typeof recordsService.hasEditAccess !== 'function' ||
315
+ typeof recordsService.hasTransitionRoleAuthorization !== 'function' ||
316
+ !validationService ||
317
+ typeof validationService.discoverOperations !== 'function') {
318
+ return [];
319
+ }
320
+ const actorRoles = Array.isArray(user.roles) ? user.roles : [];
321
+ const normalizedActorRoles = [
322
+ ...new Set(actorRoles
323
+ .map(role => typeof role === 'string' ? role.trim() : String(role?.name ?? '').trim())
324
+ .filter(Boolean)),
325
+ ].sort(sails_ng_common_1.compareRecordValidationIdentifiers);
326
+ const record = options.record ?? null;
327
+ const canEdit = record
328
+ ? recordsService.hasEditAccess(options.brand, user, actorRoles, record)
329
+ : true;
330
+ if (!canEdit)
331
+ return [];
332
+ const recordTypeName = String(record?.metaMetadata?.type ?? options.recordType ?? options.form.configuration?.type ?? '').trim();
333
+ const brandId = String(record?.metaMetadata?.brandId ?? options.brand?.id ?? '').trim();
334
+ const formName = String(record?.metaMetadata?.form ?? options.form.name ?? '').trim();
335
+ if (!recordTypeName || !brandId || !formName)
336
+ return [];
337
+ if (record && String(options.form.name ?? '').trim() !== formName)
338
+ return [];
339
+ if (!record) {
340
+ const configuredFormType = String(options.form.configuration?.type ?? '').trim();
341
+ if (configuredFormType && configuredFormType !== recordTypeName)
342
+ return [];
343
+ }
344
+ const recordType = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(options.brand, recordTypeName));
345
+ if (!recordType)
346
+ return [];
347
+ const workflowSteps = await (0, rxjs_1.firstValueFrom)(WorkflowStepsService.getAllForRecordType(recordType));
348
+ if (!record) {
349
+ const requestedContextStep = options.targetStep
350
+ ? (workflowSteps ?? []).find(step => String(step?.name ?? '').trim() === options.targetStep?.trim())
351
+ : (workflowSteps ?? []).find(step => step?.starting === true);
352
+ const contextConfig = requestedContextStep?.config;
353
+ const contextFormName = String(contextConfig && typeof contextConfig === 'object' && !Array.isArray(contextConfig)
354
+ ? (contextConfig.form ?? '')
355
+ : '').trim();
356
+ if (!contextFormName || contextFormName !== formName)
357
+ return [];
358
+ }
359
+ const authorizedTargetSteps = (workflowSteps ?? [])
360
+ .filter(step => recordsService.hasTransitionRoleAuthorization(step, user))
361
+ .map(step => String(step?.name ?? '').trim())
362
+ .filter(step => sails_ng_common_1.RECORD_VALIDATION_REFERENCE_PATTERN.test(step))
363
+ .sort(sails_ng_common_1.compareRecordValidationIdentifiers);
364
+ const targetStep = options.targetStep?.trim();
365
+ if (targetStep && !authorizedTargetSteps.includes(targetStep))
366
+ return [];
367
+ const candidate = {
368
+ ...(record?.redboxOid ? { redboxOid: String(record.redboxOid) } : {}),
369
+ metadata: record?.metadata ?? {},
370
+ metaMetadata: {
371
+ ...(record?.metaMetadata ?? {}),
372
+ brandId,
373
+ type: recordTypeName,
374
+ form: formName,
375
+ },
376
+ ...(record?.workflow ? { workflow: record.workflow } : {}),
377
+ };
378
+ const operations = await validationService.discoverOperations({
379
+ candidate,
380
+ writeKind: targetStep ? (record ? 'transition' : 'create') : record ? 'update' : 'create',
381
+ ...(targetStep ? { targetStep } : {}),
382
+ actor: { authenticated: true, roles: normalizedActorRoles },
383
+ canEdit: true,
384
+ authorizedTargetSteps,
385
+ });
386
+ const transportTargets = new Set(targetStep ? [targetStep] : authorizedTargetSteps);
387
+ const merged = new Map();
388
+ for (const operation of operations) {
389
+ const safeOperation = (0, sails_ng_common_1.sanitizeValidationOperationDiscovery)(operation, transportTargets);
390
+ if (safeOperation)
391
+ merged.set(safeOperation.name, safeOperation);
392
+ }
393
+ return [...merged.values()].sort((left, right) => (0, sails_ng_common_1.compareRecordValidationIdentifiers)(left.name, right.name));
394
+ }
395
+ catch (error) {
396
+ const errorType = error instanceof Error ? error.name : typeof error;
397
+ const recordType = String(options.record?.metaMetadata?.type ?? options.recordType ?? '').trim();
398
+ const formName = String(options.record?.metaMetadata?.form ?? options.form.name ?? '').trim();
399
+ this.logger.warn(`Validation operation discovery was safely omitted` +
400
+ ` (recordType=${sails_ng_common_1.RECORD_VALIDATION_REFERENCE_PATTERN.test(recordType) ? recordType : 'unavailable'},` +
401
+ ` form=${sails_ng_common_1.RECORD_VALIDATION_REFERENCE_PATTERN.test(formName) ? formName : 'unavailable'},` +
402
+ ` errorType=${errorType}).`);
403
+ return [];
404
+ }
405
+ }
253
406
  getFormByStartingWorkflowStep(branding, recordType, _editMode) {
254
407
  const starting = true;
255
- return super.getObservable(RecordType.findOne({
256
- key: branding.id + "_" + recordType
257
- })).pipe((0, operators_1.mergeMap)(recordTypeRecord => {
408
+ return super
409
+ .getObservable(RecordType.findOne({
410
+ key: branding.id + '_' + recordType,
411
+ }))
412
+ .pipe((0, operators_1.mergeMap)(recordTypeRecord => {
258
413
  const recordTypeId = String(recordTypeRecord?.id ?? '');
259
414
  return super.getObservable(WorkflowStep.findOne({
260
415
  recordType: recordTypeId,
261
- starting: starting
416
+ starting: starting,
262
417
  }));
263
418
  }), (0, operators_1.mergeMap)(workflowStep => {
264
419
  if (workflowStep?.starting == true) {
265
420
  return super.getObservable(Form.findOne({
266
421
  name: workflowStep.config.form,
267
- branding: branding.id
422
+ branding: branding.id,
268
423
  }));
269
424
  }
270
425
  return (0, rxjs_1.of)(null);
@@ -273,11 +428,11 @@ var Services;
273
428
  return (0, rxjs_1.of)(form);
274
429
  }
275
430
  return (0, rxjs_1.of)(null);
276
- }), (0, operators_1.take)(1), (0, operators_1.tap)((form) => {
431
+ }), (0, operators_1.take)(1), (0, operators_1.tap)(form => {
277
432
  if (!form) {
278
433
  this.logger.warn(`No starting form found for branding '${String(branding?.id ?? '')}', recordType '${recordType}'`);
279
434
  }
280
- }), (0, operators_1.map)((form) => form), (0, operators_1.catchError)((error) => {
435
+ }), (0, operators_1.map)(form => form), (0, operators_1.catchError)((error) => {
281
436
  const message = error instanceof Error ? error.message : String(error);
282
437
  this.logger.error(`Error loading starting workflow form for branding '${String(branding?.id ?? '')}', recordType '${recordType}': ${message}`);
283
438
  return (0, rxjs_1.of)(null);
@@ -289,7 +444,7 @@ var Services;
289
444
  }
290
445
  async generateFormFromSchema(branding, recordType, record) {
291
446
  if (recordType == '') {
292
- recordType = _.get(record, 'metaMetadata.type', '');
447
+ recordType = String(_.get(record, 'metaMetadata.type', ''));
293
448
  if (recordType == '') {
294
449
  return {};
295
450
  }
@@ -305,9 +460,9 @@ var Services;
305
460
  label: '@view-record-audit-link',
306
461
  value: '/@branding/@portal/record/viewAudit/@oid',
307
462
  cssClasses: 'btn btn-large btn-info margin-15',
308
- controlType: 'anchor'
463
+ controlType: 'anchor',
309
464
  },
310
- variableSubstitutionFields: ['value']
465
+ variableSubstitutionFields: ['value'],
311
466
  },
312
467
  {
313
468
  class: 'SaveButton',
@@ -324,10 +479,10 @@ var Services;
324
479
  cancelButtonMessage: '@dataPublication-cancelButtonMessage',
325
480
  confirmButtonMessage: '@dataPublication-confirmButtonMessage',
326
481
  isDelete: true,
327
- isSubmissionButton: true
482
+ isSubmissionButton: true,
328
483
  },
329
- variableSubstitutionFields: ['redirectLocation']
330
- }
484
+ variableSubstitutionFields: ['redirectLocation'],
485
+ },
331
486
  ];
332
487
  const textFieldTemplate = {
333
488
  class: 'TextField',
@@ -338,15 +493,17 @@ var Services;
338
493
  help: '',
339
494
  type: 'text',
340
495
  subscribe: {
341
- 'form': {
342
- onFormLoaded: [{
496
+ form: {
497
+ onFormLoaded: [
498
+ {
343
499
  action: 'utilityService.runTemplate',
344
500
  template: '',
345
- includeFieldInFnCall: true
346
- }]
347
- }
348
- }
349
- }
501
+ includeFieldInFnCall: true,
502
+ },
503
+ ],
504
+ },
505
+ },
506
+ },
350
507
  };
351
508
  const groupComponentTemplate = {
352
509
  class: 'Container',
@@ -354,8 +511,8 @@ var Services;
354
511
  definition: {
355
512
  name: '',
356
513
  cssClasses: 'form-inline',
357
- fields: []
358
- }
514
+ fields: [],
515
+ },
359
516
  };
360
517
  const groupTextFieldTemplate = {
361
518
  class: 'TextField',
@@ -365,8 +522,8 @@ var Services;
365
522
  type: 'text',
366
523
  groupName: '',
367
524
  groupClasses: 'width-30',
368
- cssClasses: "width-80 form-control"
369
- }
525
+ cssClasses: 'width-80 form-control',
526
+ },
370
527
  };
371
528
  const repeatableGroupComponentTemplate = {
372
529
  class: 'RepeatableContainer',
@@ -376,16 +533,16 @@ var Services;
376
533
  label: '',
377
534
  help: '',
378
535
  forceClone: ['fields'],
379
- fields: []
380
- }
536
+ fields: [],
537
+ },
381
538
  };
382
539
  const objectFieldHeadingTemplate = {
383
540
  class: 'Container',
384
541
  compClass: 'TextBlockComponent',
385
542
  definition: {
386
543
  value: '',
387
- type: 'h3'
388
- }
544
+ type: 'h3',
545
+ },
389
546
  };
390
547
  const mainTitleFieldName = 'title';
391
548
  const fieldList = [];
@@ -396,7 +553,11 @@ var Services;
396
553
  const textField = _.cloneDeep(textFieldTemplate);
397
554
  _.set(textField.definition, 'name', fieldKey);
398
555
  _.set(textField.definition, 'label', fieldKey);
399
- _.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.trim(field.fieldMap["' + fieldKey + '"].field.value) == "" ? field.translationService.t("@lookup-record-field-empty") : field.fieldMap["' + fieldKey + '"].field.value %>');
556
+ _.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.trim(field.fieldMap["' +
557
+ fieldKey +
558
+ '"].field.value) == "" ? field.translationService.t("@lookup-record-field-empty") : field.fieldMap["' +
559
+ fieldKey +
560
+ '"].field.value %>');
400
561
  fieldList.push(textField);
401
562
  }
402
563
  if (schemaType === 'array') {
@@ -405,7 +566,11 @@ var Services;
405
566
  const textField = _.cloneDeep(textFieldTemplate);
406
567
  _.set(textField.definition, 'name', fieldKey);
407
568
  _.set(textField.definition, 'label', fieldKey);
408
- _.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.isEmpty(_.trim(field.fieldMap["' + fieldKey + '"].field.value)) ? [field.translationService.t("@lookup-record-field-empty")] : field.fieldMap["' + fieldKey + '"].field.value %>');
569
+ _.set(textField.definition, 'subscribe.form.onFormLoaded[0].template', '<%= _.isEmpty(_.trim(field.fieldMap["' +
570
+ fieldKey +
571
+ '"].field.value)) ? [field.translationService.t("@lookup-record-field-empty")] : field.fieldMap["' +
572
+ fieldKey +
573
+ '"].field.value %>');
409
574
  fieldList.push(textField);
410
575
  }
411
576
  else if (itemType === 'object') {
@@ -468,16 +633,16 @@ var Services;
468
633
  viewOnly: true,
469
634
  definition: {
470
635
  name: mainTitleFieldName,
471
- type: 'h1'
472
- }
636
+ type: 'h1',
637
+ },
473
638
  },
474
639
  {
475
640
  class: 'Container',
476
641
  compClass: 'GenericGroupComponent',
477
642
  definition: {
478
- cssClasses: "form-inline",
479
- fields: buttonsList
480
- }
643
+ cssClasses: 'form-inline',
644
+ fields: buttonsList,
645
+ },
481
646
  },
482
647
  {
483
648
  class: 'TabOrAccordionContainer',
@@ -494,13 +659,13 @@ var Services;
494
659
  id: 'main',
495
660
  label: '@lookup-record-details-' + recordType,
496
661
  active: true,
497
- fields: fieldList
498
- }
499
- }
500
- ]
501
- }
502
- }
503
- ]
662
+ fields: fieldList,
663
+ },
664
+ },
665
+ ],
666
+ },
667
+ },
668
+ ],
504
669
  };
505
670
  const form = formObject;
506
671
  return form;
@@ -524,6 +689,29 @@ var Services;
524
689
  }
525
690
  });
526
691
  }
692
+ /**
693
+ * Build the translation lookup used to resolve form config default values.
694
+ *
695
+ * Returns undefined when the translation service is not available, so the form
696
+ * config values are left as they are rather than failing to build the form.
697
+ *
698
+ * @param branding The branding name.
699
+ */
700
+ buildFormConfigTranslator(branding) {
701
+ if (typeof TranslationService === 'undefined' || typeof TranslationService?.t !== 'function') {
702
+ return undefined;
703
+ }
704
+ const brandingName = branding || 'default';
705
+ return (key) => {
706
+ try {
707
+ return String(TranslationService.t(key, undefined, 'en', brandingName) ?? key);
708
+ }
709
+ catch (error) {
710
+ this.logger.warn(`Failed to translate form config value '${key}': ${error?.message}`);
711
+ return key;
712
+ }
713
+ };
714
+ }
527
715
  /**
528
716
  * Convert a server-side form config to a client-side form config.
529
717
  *
@@ -533,22 +721,38 @@ var Services;
533
721
  * @param recordMetadata The record metadata.
534
722
  * @param reusableFormDefs The reusable form definitions.
535
723
  */
536
- async buildClientFormConfig(item, formMode, userRoles, recordMetadata, reusableFormDefs, branding, contextVariablesMap) {
724
+ async buildClientFormConfig(item, formMode, userRoles, recordMetadata, reusableFormDefs, branding, contextVariablesMap, recordAccessContext, preserveDefaultValues = false) {
537
725
  const constructor = new construct_visitor_1.ConstructFormConfigVisitor(this.logger);
538
- const constructed = await constructor.start({ data: item, reusableFormDefs, formMode, record: recordMetadata });
726
+ const constructed = await constructor.start({
727
+ data: item,
728
+ reusableFormDefs,
729
+ formMode,
730
+ record: recordMetadata,
731
+ translate: this.buildFormConfigTranslator(branding),
732
+ preserveDefaultValues,
733
+ });
539
734
  const vocabVisitor = new vocab_inline_visitor_1.VocabInlineFormConfigVisitor(this.logger);
540
735
  await vocabVisitor.resolveVocabs(constructed, branding, {
541
- includeHistoricalValues: recordMetadata !== null && recordMetadata !== undefined
736
+ includeHistoricalValues: recordMetadata !== null && recordMetadata !== undefined,
542
737
  });
543
738
  const contextVariablesVisitor = new context_variables_visitor_1.ContextVariablesFormConfigVisitor(this.logger);
544
739
  await contextVariablesVisitor.applyContextVariables(constructed, contextVariablesMap);
740
+ if (recordMetadata && recordAccessContext) {
741
+ const recordsService = sails.services.recordsservice;
742
+ const relatedVisitor = new related_object_data_inline_visitor_1.RelatedObjectDataInlineFormConfigVisitor(this.logger, recordsService);
743
+ await relatedVisitor.resolve(constructed, recordMetadata, recordAccessContext);
744
+ }
545
745
  // create the client form config
546
746
  const visitor = new client_visitor_1.ClientFormConfigVisitor(this.logger);
547
747
  const result = await visitor.start({ form: constructed, formMode, userRoles, reusableFormDefs });
548
748
  if (!result) {
549
749
  throw new Error(`The form config is invalid because all form fields were removed, ` +
550
750
  `the form config must have at least one field the current user can view: ${JSON.stringify({
551
- item, formMode, userRoles, recordData: recordMetadata, reusableFormDefs
751
+ item,
752
+ formMode,
753
+ userRoles,
754
+ recordData: recordMetadata,
755
+ reusableFormDefs,
552
756
  })}`);
553
757
  }
554
758
  const componentDefinitions = result.componentDefinitions;
@@ -560,6 +764,62 @@ var Services;
560
764
  }
561
765
  return result;
562
766
  }
767
+ /**
768
+ * Build the effective form used to compile a record contract.
769
+ *
770
+ * Create contracts deliberately use the form defaults rather than a synthetic
771
+ * record candidate. This keeps candidate-dependent form branches available to
772
+ * the contract compiler. Update contracts use the authoritative existing record.
773
+ */
774
+ async buildContractFormConfig(context, recordAccessContext) {
775
+ const { resolution } = context;
776
+ const sourceForm = _.cloneDeep({
777
+ ...resolution.sourceForm,
778
+ componentDefinitions: [...resolution.sourceForm.componentDefinitions],
779
+ });
780
+ const reusableFormDefinitions = {};
781
+ for (const [name, definitions] of Object.entries(resolution.reusableFormDefinitions)) {
782
+ reusableFormDefinitions[name] = _.cloneDeep([...definitions]);
783
+ }
784
+ const recordMetadata = context.publicContext.kind === 'update'
785
+ ? _.cloneDeep((context.resolution.existingRecord?.metadata ?? {}))
786
+ : null;
787
+ const effectiveForm = await this.buildClientFormConfig(sourceForm, resolution.formMode, [...resolution.actor.roles], recordMetadata, reusableFormDefinitions, context.publicContext.brand, _.cloneDeep(resolution.contextVariables), recordAccessContext, true);
788
+ effectiveForm.componentDefinitions = this.retainSubmittableContractComponents(effectiveForm.componentDefinitions ?? []);
789
+ if (effectiveForm.componentDefinitions.length === 0) {
790
+ return { ok: false, reason: 'empty-effective-form' };
791
+ }
792
+ return { ok: true, effectiveForm };
793
+ }
794
+ /** Prune known display-only core leaves and structural shells emptied by that pruning. */
795
+ retainSubmittableContractComponents(componentDefinitions) {
796
+ const nestedKeys = ['componentDefinitions', 'tabs', 'panels', 'headerActions'];
797
+ return componentDefinitions.filter(componentDefinition => {
798
+ const componentType = componentDefinition.component.class;
799
+ const classification = Object.prototype.hasOwnProperty.call(core_contributors_1.CORE_RECORD_CONTRACT_COMPONENT_INVENTORY, componentType)
800
+ ? core_contributors_1.CORE_RECORD_CONTRACT_COMPONENT_INVENTORY[componentType]
801
+ : undefined;
802
+ const config = componentDefinition.component.config;
803
+ let nestedComponentCount = 0;
804
+ let hasNestedComponents = false;
805
+ for (const key of nestedKeys) {
806
+ if (!config)
807
+ break;
808
+ const children = config[key];
809
+ if (!Array.isArray(children))
810
+ continue;
811
+ hasNestedComponents = true;
812
+ const retained = this.retainSubmittableContractComponents(children);
813
+ config[key] = retained;
814
+ nestedComponentCount += retained.length;
815
+ }
816
+ if (classification === 'non-persisting')
817
+ return false;
818
+ if (classification === 'container')
819
+ return hasNestedComponents && nestedComponentCount > 0;
820
+ return true;
821
+ });
822
+ }
563
823
  findComponentDefinitionByName(componentDefinitions, targetName) {
564
824
  for (const componentDefinition of componentDefinitions) {
565
825
  const typedDefinition = componentDefinition;
@@ -579,4 +839,4 @@ var Services;
579
839
  }
580
840
  Services.Forms = Forms;
581
841
  })(Services || (exports.Services = Services = {}));
582
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0Zvcm1zU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU5RCwrQkFBc0Q7QUFDdEQsOENBQWlGO0FBQ2pGLGdEQUFzRDtBQUd0RCx5Q0FBeUM7QUFDekMsMkNBQTZCO0FBQzdCLDBFQUErRTtBQUsvRSw4REFBb0U7QUFDcEUsb0VBQTBFO0FBQzFFLG9GQUF5RjtBQThCekYsSUFBaUIsUUFBUSxDQXVsQnhCO0FBdmxCRCxXQUFpQixRQUFRO0lBQ3ZCOzs7OztPQUtHO0lBQ0gsTUFBYSxLQUFNLFNBQVEsc0JBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTztRQUM3QixzQ0FBc0MsR0FBRyxzQ0FBc0MsQ0FBQztRQUU5RSxnQkFBZ0IsR0FBYTtZQUM5QyxXQUFXO1lBQ1gsU0FBUztZQUNULGVBQWU7WUFDZixlQUFlO1lBQ2YsMkJBQTJCO1lBQzNCLFdBQVc7WUFDWCx5QkFBeUI7WUFDekIsd0JBQXdCO1lBQ3hCLCtCQUErQjtZQUMvQix1QkFBdUI7U0FDeEIsQ0FBQztRQUVLLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBOEIsRUFBRSxVQUFrQjtZQUN2RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyx5Q0FBeUMsWUFBWSxDQUFDLEVBQUUsc0JBQXNCLFlBQVksQ0FBQyxNQUFN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
842
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybXNTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0Zvcm1zU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU5RCwrQkFBc0Q7QUFDdEQsOENBQWlGO0FBQ2pGLGdEQUFzRDtBQUl0RCx5Q0FBeUM7QUFDekMsMkNBQTZCO0FBQzdCLDBFQUErRTtBQUMvRSxzRUFVMEM7QUFDMUMsOERBQW9FO0FBQ3BFLG9FQUEwRTtBQUMxRSxvRkFBeUY7QUFDekYsc0dBQXlHO0FBSXpHLDRFQUc4QztBQXFGOUMsSUFBaUIsUUFBUSxDQW02QnhCO0FBbjZCRCxXQUFpQixRQUFRO0lBQ3ZCOzs7OztPQUtHO0lBQ0gsTUFBYSxLQUFNLFNBQVEsc0JBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTztRQUM3QixzQ0FBc0MsR0FBRyxzQ0FBc0MsQ0FBQztRQUU5RSxnQkFBZ0IsR0FBYTtZQUM5QyxXQUFXO1lBQ1gsU0FBUztZQUNULGVBQWU7WUFDZixlQUFlO1lBQ2YsMkJBQTJCO1lBQzNCLFdBQVc7WUFDWCx5QkFBeUI7WUFDekIsd0JBQXdCO1lBQ3hCLCtCQUErQjtZQUMvQix1QkFBdUI7WUFDdkIseUJBQXlCO1lBQ3pCLG1DQUFtQztZQUNuQyw4QkFBOEI7WUFDOUIsY0FBYztTQUNmLENBQUM7UUFFSyxLQUFLLENBQUMsU0FBUyxDQUFDLFlBQThCLEVB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