@researchdatabox/redbox-core 0.0.1-beta.9228 → 0.0.1-beta.9604

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 (420) hide show
  1. package/dist/CoreController.d.ts +4 -0
  2. package/dist/CoreController.d.ts.map +1 -1
  3. package/dist/CoreController.js +40 -4
  4. package/dist/DatastreamService.d.ts +5 -2
  5. package/dist/DatastreamService.d.ts.map +1 -1
  6. package/dist/QueueService.d.ts +1 -1
  7. package/dist/QueueService.d.ts.map +1 -1
  8. package/dist/RecordsService.d.ts +38 -2
  9. package/dist/RecordsService.d.ts.map +1 -1
  10. package/dist/StorageService.d.ts +2 -1
  11. package/dist/StorageService.d.ts.map +1 -1
  12. package/dist/api-routes/apib.d.ts +7 -0
  13. package/dist/api-routes/apib.d.ts.map +1 -0
  14. package/dist/api-routes/apib.js +43 -0
  15. package/dist/api-routes/define.d.ts +4 -0
  16. package/dist/api-routes/define.d.ts.map +1 -0
  17. package/dist/api-routes/define.js +29 -0
  18. package/dist/api-routes/groups/admin.d.ts +6 -0
  19. package/dist/api-routes/groups/admin.d.ts.map +1 -0
  20. package/dist/api-routes/groups/admin.js +53 -0
  21. package/dist/api-routes/groups/appconfig.d.ts +4 -0
  22. package/dist/api-routes/groups/appconfig.d.ts.map +1 -0
  23. package/dist/api-routes/groups/appconfig.js +33 -0
  24. package/dist/api-routes/groups/branding.d.ts +8 -0
  25. package/dist/api-routes/groups/branding.d.ts.map +1 -0
  26. package/dist/api-routes/groups/branding.js +61 -0
  27. package/dist/api-routes/groups/dashboard-config.d.ts +11 -0
  28. package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -0
  29. package/dist/api-routes/groups/dashboard-config.js +90 -0
  30. package/dist/api-routes/groups/export.d.ts +3 -0
  31. package/dist/api-routes/groups/export.d.ts.map +1 -0
  32. package/dist/api-routes/groups/export.js +30 -0
  33. package/dist/api-routes/groups/forms.d.ts +4 -0
  34. package/dist/api-routes/groups/forms.d.ts.map +1 -0
  35. package/dist/api-routes/groups/forms.js +29 -0
  36. package/dist/api-routes/groups/integration-audit.d.ts +3 -0
  37. package/dist/api-routes/groups/integration-audit.d.ts.map +1 -0
  38. package/dist/api-routes/groups/integration-audit.js +35 -0
  39. package/dist/api-routes/groups/notifications.d.ts +3 -0
  40. package/dist/api-routes/groups/notifications.d.ts.map +1 -0
  41. package/dist/api-routes/groups/notifications.js +20 -0
  42. package/dist/api-routes/groups/records.d.ts +28 -0
  43. package/dist/api-routes/groups/records.d.ts.map +1 -0
  44. package/dist/api-routes/groups/records.js +349 -0
  45. package/dist/api-routes/groups/recordtypes.d.ts +4 -0
  46. package/dist/api-routes/groups/recordtypes.d.ts.map +1 -0
  47. package/dist/api-routes/groups/recordtypes.js +27 -0
  48. package/dist/api-routes/groups/reports.d.ts +3 -0
  49. package/dist/api-routes/groups/reports.d.ts.map +1 -0
  50. package/dist/api-routes/groups/reports.js +20 -0
  51. package/dist/api-routes/groups/search-query.d.ts +4 -0
  52. package/dist/api-routes/groups/search-query.d.ts.map +1 -0
  53. package/dist/api-routes/groups/search-query.js +51 -0
  54. package/dist/api-routes/groups/search.d.ts +6 -0
  55. package/dist/api-routes/groups/search.d.ts.map +1 -0
  56. package/dist/api-routes/groups/search.js +31 -0
  57. package/dist/api-routes/groups/translation.d.ts +8 -0
  58. package/dist/api-routes/groups/translation.d.ts.map +1 -0
  59. package/dist/api-routes/groups/translation.js +82 -0
  60. package/dist/api-routes/groups/users.d.ts +17 -0
  61. package/dist/api-routes/groups/users.d.ts.map +1 -0
  62. package/dist/api-routes/groups/users.js +149 -0
  63. package/dist/api-routes/groups/vocabulary.d.ts +10 -0
  64. package/dist/api-routes/groups/vocabulary.d.ts.map +1 -0
  65. package/dist/api-routes/groups/vocabulary.js +97 -0
  66. package/dist/api-routes/helpers.d.ts +29 -0
  67. package/dist/api-routes/helpers.d.ts.map +1 -0
  68. package/dist/api-routes/helpers.js +486 -0
  69. package/dist/api-routes/index.d.ts +25 -0
  70. package/dist/api-routes/index.d.ts.map +1 -0
  71. package/dist/api-routes/index.js +41 -0
  72. package/dist/api-routes/openapi.d.ts +27 -0
  73. package/dist/api-routes/openapi.d.ts.map +1 -0
  74. package/dist/api-routes/openapi.js +273 -0
  75. package/dist/api-routes/request-extraction.d.ts +14 -0
  76. package/dist/api-routes/request-extraction.d.ts.map +1 -0
  77. package/dist/api-routes/request-extraction.js +100 -0
  78. package/dist/api-routes/route-factory.d.ts +3 -0
  79. package/dist/api-routes/route-factory.d.ts.map +1 -0
  80. package/dist/api-routes/route-factory.js +30 -0
  81. package/dist/api-routes/route-registry.d.ts +24 -0
  82. package/dist/api-routes/route-registry.d.ts.map +1 -0
  83. package/dist/api-routes/route-registry.js +113 -0
  84. package/dist/api-routes/route-resolution.d.ts +4 -0
  85. package/dist/api-routes/route-resolution.d.ts.map +1 -0
  86. package/dist/api-routes/route-resolution.js +57 -0
  87. package/dist/api-routes/schemas/common.d.ts +37 -0
  88. package/dist/api-routes/schemas/common.d.ts.map +1 -0
  89. package/dist/api-routes/schemas/common.js +147 -0
  90. package/dist/api-routes/schemas/responses.d.ts +2904 -0
  91. package/dist/api-routes/schemas/responses.d.ts.map +1 -0
  92. package/dist/api-routes/schemas/responses.js +417 -0
  93. package/dist/api-routes/types.d.ts +70 -0
  94. package/dist/api-routes/types.d.ts.map +1 -0
  95. package/dist/api-routes/types.js +3 -0
  96. package/dist/api-routes/validation.d.ts +32 -0
  97. package/dist/api-routes/validation.d.ts.map +1 -0
  98. package/dist/api-routes/validation.js +142 -0
  99. package/dist/bootstrap.d.ts.map +1 -1
  100. package/dist/bootstrap.js +10 -10
  101. package/dist/config/agendaQueue.config.d.ts +25 -1
  102. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  103. package/dist/config/agendaQueue.config.js +19 -2
  104. package/dist/config/auth.config.d.ts.map +1 -1
  105. package/dist/config/auth.config.js +21 -2
  106. package/dist/config/branding.config.d.ts +2 -1
  107. package/dist/config/branding.config.d.ts.map +1 -1
  108. package/dist/config/branding.config.js +5 -95
  109. package/dist/config/brandingConfigurationDefaults.config.js +3 -3
  110. package/dist/config/dashboardtype.config.d.ts +5 -0
  111. package/dist/config/dashboardtype.config.d.ts.map +1 -1
  112. package/dist/config/dashboardtype.config.js +1 -1
  113. package/dist/config/dashboardview.config.d.ts +24 -0
  114. package/dist/config/dashboardview.config.d.ts.map +1 -0
  115. package/dist/config/dashboardview.config.js +137 -0
  116. package/dist/config/dompurify.config.d.ts.map +1 -1
  117. package/dist/config/dompurify.config.js +2 -2
  118. package/dist/config/form.config.d.ts +4 -0
  119. package/dist/config/form.config.d.ts.map +1 -1
  120. package/dist/config/form.config.js +1 -1
  121. package/dist/config/http.config.d.ts +1 -1
  122. package/dist/config/http.config.d.ts.map +1 -1
  123. package/dist/config/http.config.js +36 -6
  124. package/dist/config/index.d.ts +6 -0
  125. package/dist/config/index.d.ts.map +1 -1
  126. package/dist/config/index.js +4 -1
  127. package/dist/config/namedQuery.config.d.ts +10 -2
  128. package/dist/config/namedQuery.config.d.ts.map +1 -1
  129. package/dist/config/namedQuery.config.js +17 -17
  130. package/dist/config/policies.config.d.ts +3 -0
  131. package/dist/config/policies.config.d.ts.map +1 -1
  132. package/dist/config/policies.config.js +35 -1
  133. package/dist/config/record.config.d.ts.map +1 -1
  134. package/dist/config/record.config.js +2 -1
  135. package/dist/config/recordtype.config.d.ts +28 -0
  136. package/dist/config/recordtype.config.d.ts.map +1 -1
  137. package/dist/config/recordtype.config.js +85 -9
  138. package/dist/config/routes.config.d.ts +5 -2
  139. package/dist/config/routes.config.d.ts.map +1 -1
  140. package/dist/config/routes.config.js +28 -113
  141. package/dist/config/storage.config.d.ts +20 -2
  142. package/dist/config/storage.config.d.ts.map +1 -1
  143. package/dist/config/storage.config.js +2 -1
  144. package/dist/config/validators.config.d.ts +6 -4
  145. package/dist/config/validators.config.d.ts.map +1 -1
  146. package/dist/config/validators.config.js +5 -3
  147. package/dist/config/vocab.config.d.ts +30 -0
  148. package/dist/config/vocab.config.d.ts.map +1 -1
  149. package/dist/config/vocab.config.js +21 -1
  150. package/dist/config/webpack.config.d.ts.map +1 -1
  151. package/dist/config/webpack.config.js +18 -12
  152. package/dist/config/workflow.config.d.ts +0 -1
  153. package/dist/config/workflow.config.d.ts.map +1 -1
  154. package/dist/config/workflow.config.js +1 -137
  155. package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
  156. package/dist/configmodels/AdminSidebarConfig.js +1 -2
  157. package/dist/configmodels/ConfigModels.d.ts +1 -1
  158. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  159. package/dist/configmodels/ConfigModels.js +9 -1
  160. package/dist/configmodels/DashboardTableOverrideConfig.d.ts +1011 -0
  161. package/dist/configmodels/DashboardTableOverrideConfig.d.ts.map +1 -0
  162. package/dist/configmodels/DashboardTableOverrideConfig.js +138 -0
  163. package/dist/controllers/AdminController.d.ts +0 -1
  164. package/dist/controllers/AdminController.d.ts.map +1 -1
  165. package/dist/controllers/AdminController.js +2 -32
  166. package/dist/controllers/BrandingAppController.js +2 -2
  167. package/dist/controllers/BrandingController.d.ts +11 -5
  168. package/dist/controllers/BrandingController.d.ts.map +1 -1
  169. package/dist/controllers/BrandingController.js +116 -48
  170. package/dist/controllers/DashboardConfigController.d.ts +8 -0
  171. package/dist/controllers/DashboardConfigController.d.ts.map +1 -0
  172. package/dist/controllers/DashboardConfigController.js +17 -0
  173. package/dist/controllers/DynamicAssetController.d.ts +1 -21
  174. package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
  175. package/dist/controllers/DynamicAssetController.js +19 -41
  176. package/dist/controllers/EmailController.d.ts.map +1 -1
  177. package/dist/controllers/EmailController.js +16 -12
  178. package/dist/controllers/FormVocabularyController.d.ts +3 -0
  179. package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
  180. package/dist/controllers/FormVocabularyController.js +151 -4
  181. package/dist/controllers/RecordController.d.ts +18 -1
  182. package/dist/controllers/RecordController.d.ts.map +1 -1
  183. package/dist/controllers/RecordController.js +295 -129
  184. package/dist/controllers/RenderViewController.d.ts.map +1 -1
  185. package/dist/controllers/RenderViewController.js +4 -2
  186. package/dist/controllers/TranslationController.d.ts.map +1 -1
  187. package/dist/controllers/TranslationController.js +5 -4
  188. package/dist/controllers/WorkspaceTypesController.d.ts +3 -2
  189. package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -1
  190. package/dist/controllers/WorkspaceTypesController.js +120 -31
  191. package/dist/controllers/index.d.ts.map +1 -1
  192. package/dist/controllers/index.js +7 -4
  193. package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
  194. package/dist/controllers/webservice/AdminController.js +16 -17
  195. package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -1
  196. package/dist/controllers/webservice/AppConfigController.js +19 -20
  197. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  198. package/dist/controllers/webservice/BrandingController.js +102 -49
  199. package/dist/controllers/webservice/DashboardConfigController.d.ts +26 -0
  200. package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -0
  201. package/dist/controllers/webservice/DashboardConfigController.js +241 -0
  202. package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
  203. package/dist/controllers/webservice/ExportController.js +11 -11
  204. package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
  205. package/dist/controllers/webservice/FormManagementController.js +11 -13
  206. package/dist/controllers/webservice/RecordController.d.ts +4 -0
  207. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  208. package/dist/controllers/webservice/RecordController.js +428 -257
  209. package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
  210. package/dist/controllers/webservice/RecordTypeController.js +9 -10
  211. package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
  212. package/dist/controllers/webservice/ReportController.js +18 -20
  213. package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
  214. package/dist/controllers/webservice/SearchController.js +28 -35
  215. package/dist/controllers/webservice/TranslationController.d.ts.map +1 -1
  216. package/dist/controllers/webservice/TranslationController.js +65 -43
  217. package/dist/controllers/webservice/UserManagementController.d.ts +1 -1
  218. package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
  219. package/dist/controllers/webservice/UserManagementController.js +114 -101
  220. package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
  221. package/dist/controllers/webservice/VocabularyController.js +76 -28
  222. package/dist/hooks/defineRedboxHook.d.ts +3 -0
  223. package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
  224. package/dist/hooks/defineRedboxHook.js +4 -1
  225. package/dist/hooks/webpack.d.ts.map +1 -1
  226. package/dist/hooks/webpack.js +17 -7
  227. package/dist/index.d.ts +2 -0
  228. package/dist/index.d.ts.map +1 -1
  229. package/dist/index.js +2 -1
  230. package/dist/loader/index.d.ts +6 -0
  231. package/dist/loader/index.d.ts.map +1 -1
  232. package/dist/loader/index.js +57 -10
  233. package/dist/middleware/redboxSession.d.ts.map +1 -1
  234. package/dist/middleware/redboxSession.js +6 -2
  235. package/dist/model/BuildResponse.d.ts +4 -0
  236. package/dist/model/BuildResponse.d.ts.map +1 -1
  237. package/dist/model/DashboardTypeResponseModel.d.ts +13 -1
  238. package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
  239. package/dist/model/DashboardTypeResponseModel.js +12 -4
  240. package/dist/model/DashboardViewResponseModel.d.ts +20 -0
  241. package/dist/model/DashboardViewResponseModel.d.ts.map +1 -0
  242. package/dist/model/DashboardViewResponseModel.js +38 -0
  243. package/dist/model/RecordTypeResponseModel.d.ts +3 -1
  244. package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
  245. package/dist/model/RecordTypeResponseModel.js +4 -2
  246. package/dist/model/index.d.ts +1 -0
  247. package/dist/model/index.d.ts.map +1 -1
  248. package/dist/model/index.js +5 -2
  249. package/dist/model/storage/BrandingModel.d.ts +0 -16
  250. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  251. package/dist/model/storage/BrandingModel.js +2 -51
  252. package/dist/model/storage/DashboardTypeModel.d.ts +4 -0
  253. package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -1
  254. package/dist/model/storage/RecordTypeModel.d.ts +16 -0
  255. package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
  256. package/dist/model/storage/RecordTypeModel.js +9 -1
  257. package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
  258. package/dist/policies/contentSecurityPolicy.js +23 -2
  259. package/dist/policies/index.d.ts +3 -0
  260. package/dist/policies/index.d.ts.map +1 -1
  261. package/dist/policies/index.js +6 -2
  262. package/dist/policies/validateApiContractRequest.d.ts +3 -0
  263. package/dist/policies/validateApiContractRequest.d.ts.map +1 -0
  264. package/dist/policies/validateApiContractRequest.js +74 -0
  265. package/dist/responses/badRequest.d.ts.map +1 -1
  266. package/dist/responses/badRequest.js +5 -3
  267. package/dist/responses/created.d.ts.map +1 -1
  268. package/dist/responses/created.js +5 -3
  269. package/dist/responses/forbidden.d.ts.map +1 -1
  270. package/dist/responses/forbidden.js +5 -3
  271. package/dist/responses/ok.d.ts.map +1 -1
  272. package/dist/responses/ok.js +5 -3
  273. package/dist/responses/serverError.d.ts.map +1 -1
  274. package/dist/responses/serverError.js +5 -3
  275. package/dist/responses/siteTitle.d.ts +6 -0
  276. package/dist/responses/siteTitle.d.ts.map +1 -0
  277. package/dist/responses/siteTitle.js +28 -0
  278. package/dist/sails.d.ts +9 -0
  279. package/dist/sails.d.ts.map +1 -1
  280. package/dist/services/AgendaQueueService.d.ts +38 -17
  281. package/dist/services/AgendaQueueService.d.ts.map +1 -1
  282. package/dist/services/AgendaQueueService.js +311 -81
  283. package/dist/services/AttachmentMetadataService.d.ts +34 -0
  284. package/dist/services/AttachmentMetadataService.d.ts.map +1 -0
  285. package/dist/services/AttachmentMetadataService.js +133 -0
  286. package/dist/services/BrandingLogoService.d.ts +6 -8
  287. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  288. package/dist/services/BrandingLogoService.js +66 -72
  289. package/dist/services/BrandingService.d.ts.map +1 -1
  290. package/dist/services/BrandingService.js +4 -32
  291. package/dist/services/BrandingThemeCssService.d.ts +21 -0
  292. package/dist/services/BrandingThemeCssService.d.ts.map +1 -0
  293. package/dist/services/BrandingThemeCssService.js +113 -0
  294. package/dist/services/BrandingThemeTokens.d.ts +16 -0
  295. package/dist/services/BrandingThemeTokens.d.ts.map +1 -0
  296. package/dist/services/BrandingThemeTokens.js +82 -0
  297. package/dist/services/CacheService.d.ts.map +1 -1
  298. package/dist/services/CacheService.js +37 -29
  299. package/dist/services/DashboardConfigService.d.ts +71 -0
  300. package/dist/services/DashboardConfigService.d.ts.map +1 -0
  301. package/dist/services/DashboardConfigService.js +309 -0
  302. package/dist/services/DashboardTypesService.d.ts +61 -63
  303. package/dist/services/DashboardTypesService.d.ts.map +1 -1
  304. package/dist/services/DashboardTypesService.js +361 -198
  305. package/dist/services/DoiService.d.ts +11 -0
  306. package/dist/services/DoiService.d.ts.map +1 -1
  307. package/dist/services/DoiService.js +206 -1
  308. package/dist/services/FigshareService.d.ts.map +1 -1
  309. package/dist/services/FigshareService.js +5 -1
  310. package/dist/services/FormPayloadPrehydrateService.d.ts +35 -0
  311. package/dist/services/FormPayloadPrehydrateService.d.ts.map +1 -0
  312. package/dist/services/FormPayloadPrehydrateService.js +200 -0
  313. package/dist/services/FormRecordConsistencyService.d.ts +3 -3
  314. package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
  315. package/dist/services/FormRecordConsistencyService.js +18 -18
  316. package/dist/services/FormVocabularyService.d.ts +45 -0
  317. package/dist/services/FormVocabularyService.d.ts.map +1 -0
  318. package/dist/services/FormVocabularyService.js +326 -0
  319. package/dist/services/FormsService.js +5 -5
  320. package/dist/services/I18nEntriesService.d.ts +9 -4
  321. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  322. package/dist/services/I18nEntriesService.js +96 -18
  323. package/dist/services/NamedQueryService.d.ts +27 -9
  324. package/dist/services/NamedQueryService.d.ts.map +1 -1
  325. package/dist/services/NamedQueryService.js +223 -55
  326. package/dist/services/OniService.js +2 -2
  327. package/dist/services/RDMPService.d.ts.map +1 -1
  328. package/dist/services/RDMPService.js +3 -2
  329. package/dist/services/RecordsService.d.ts +8 -2
  330. package/dist/services/RecordsService.d.ts.map +1 -1
  331. package/dist/services/RecordsService.js +66 -18
  332. package/dist/services/ReportsService.d.ts.map +1 -1
  333. package/dist/services/ReportsService.js +7 -1
  334. package/dist/services/SassCompilerService.d.ts +4 -10
  335. package/dist/services/SassCompilerService.d.ts.map +1 -1
  336. package/dist/services/SassCompilerService.js +9 -173
  337. package/dist/services/StandardDatastreamService.d.ts +37 -5
  338. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  339. package/dist/services/StandardDatastreamService.js +535 -38
  340. package/dist/services/StorageManagerService.d.ts +13 -1
  341. package/dist/services/StorageManagerService.d.ts.map +1 -1
  342. package/dist/services/StorageManagerService.js +94 -11
  343. package/dist/services/TemplateService.d.ts +1 -17
  344. package/dist/services/TemplateService.d.ts.map +1 -1
  345. package/dist/services/TemplateService.js +5 -50
  346. package/dist/services/VocabularyService.d.ts +12 -0
  347. package/dist/services/VocabularyService.d.ts.map +1 -1
  348. package/dist/services/VocabularyService.js +201 -14
  349. package/dist/services/doi-v2/bindings.d.ts.map +1 -1
  350. package/dist/services/doi-v2/bindings.js +2 -8
  351. package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
  352. package/dist/services/figshare-v2/bindings.js +2 -5
  353. package/dist/services/index.d.ts +15 -3
  354. package/dist/services/index.d.ts.map +1 -1
  355. package/dist/services/index.js +27 -7
  356. package/dist/storage/GridFSDriver.d.ts +101 -0
  357. package/dist/storage/GridFSDriver.d.ts.map +1 -0
  358. package/dist/storage/GridFSDriver.js +291 -0
  359. package/dist/storage/TusStorageManagerDataStore.d.ts +49 -0
  360. package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -0
  361. package/dist/storage/TusStorageManagerDataStore.js +300 -0
  362. package/dist/visitor/attachment-fields.visitor.d.ts +17 -17
  363. package/dist/visitor/attachment-fields.visitor.d.ts.map +1 -1
  364. package/dist/visitor/attachment-fields.visitor.js +44 -34
  365. package/dist/visitor/client.visitor.d.ts +93 -92
  366. package/dist/visitor/client.visitor.d.ts.map +1 -1
  367. package/dist/visitor/client.visitor.js +159 -159
  368. package/dist/visitor/construct.visitor.d.ts +95 -95
  369. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  370. package/dist/visitor/construct.visitor.js +159 -156
  371. package/dist/visitor/context-variables.visitor.d.ts +35 -35
  372. package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
  373. package/dist/visitor/context-variables.visitor.js +85 -75
  374. package/dist/visitor/data-value.visitor.d.ts +95 -95
  375. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  376. package/dist/visitor/data-value.visitor.js +151 -151
  377. package/dist/visitor/json-type-def.visitor.d.ts +92 -92
  378. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  379. package/dist/visitor/json-type-def.visitor.js +152 -152
  380. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +96 -96
  381. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  382. package/dist/visitor/migrate-config-v4-v5.visitor.js +205 -184
  383. package/dist/visitor/template.visitor.d.ts +96 -94
  384. package/dist/visitor/template.visitor.d.ts.map +1 -1
  385. package/dist/visitor/template.visitor.js +214 -159
  386. package/dist/visitor/validator.visitor.d.ts +92 -92
  387. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  388. package/dist/visitor/validator.visitor.js +175 -154
  389. package/dist/visitor/visitor-helpers.js +9 -9
  390. package/dist/visitor/vocab-inline.visitor.d.ts +18 -18
  391. package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
  392. package/dist/visitor/vocab-inline.visitor.js +67 -53
  393. package/dist/waterline-models/AttachmentAccessAudit.d.ts +26 -0
  394. package/dist/waterline-models/AttachmentAccessAudit.d.ts.map +1 -0
  395. package/dist/waterline-models/AttachmentAccessAudit.js +63 -0
  396. package/dist/waterline-models/AttachmentMetadata.d.ts +40 -0
  397. package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -0
  398. package/dist/waterline-models/AttachmentMetadata.js +147 -0
  399. package/dist/waterline-models/BrandingConfig.d.ts +0 -2
  400. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  401. package/dist/waterline-models/BrandingConfig.js +5 -9
  402. package/dist/waterline-models/DashboardType.d.ts +7 -0
  403. package/dist/waterline-models/DashboardType.d.ts.map +1 -1
  404. package/dist/waterline-models/DashboardType.js +16 -1
  405. package/dist/waterline-models/I18nTranslation.d.ts +2 -0
  406. package/dist/waterline-models/I18nTranslation.d.ts.map +1 -1
  407. package/dist/waterline-models/I18nTranslation.js +6 -1
  408. package/dist/waterline-models/NamedQuery.d.ts +6 -0
  409. package/dist/waterline-models/NamedQuery.d.ts.map +1 -1
  410. package/dist/waterline-models/NamedQuery.js +16 -1
  411. package/dist/waterline-models/index.d.ts +4 -0
  412. package/dist/waterline-models/index.d.ts.map +1 -1
  413. package/dist/waterline-models/index.js +7 -1
  414. package/package.json +36 -23
  415. package/dist/controllers/VocabController.d.ts +0 -43
  416. package/dist/controllers/VocabController.d.ts.map +0 -1
  417. package/dist/controllers/VocabController.js +0 -190
  418. package/dist/services/VocabService.d.ts +0 -81
  419. package/dist/services/VocabService.d.ts.map +0 -1
  420. package/dist/services/VocabService.js +0 -424
@@ -97,7 +97,7 @@ var Controllers;
97
97
  'addRoleView',
98
98
  'removeRoleView',
99
99
  'harvest',
100
- 'legacyHarvest'
100
+ 'legacyHarvest',
101
101
  ];
102
102
  init() {
103
103
  this.RecordsService = sails.services.recordsservice;
@@ -115,44 +115,109 @@ var Controllers;
115
115
  **************************************** Add custom methods **************************************
116
116
  **************************************************************************************************
117
117
  */
118
- bootstrap() {
119
- }
118
+ bootstrap() { }
120
119
  asError(error) {
121
120
  return error instanceof Error ? error : new Error(String(error));
122
121
  }
122
+ shouldIncludeRelationships(req) {
123
+ const include = String(req.param('include') ?? req.query.include ?? '').trim().toLowerCase();
124
+ const includeRelationships = String(req.param('includeRelationships') ?? req.query.includeRelationships ?? '').trim().toLowerCase();
125
+ return include.split(',').includes('relationships') || includeRelationships === 'true';
126
+ }
127
+ parseRelationshipExpandOptions(req, defaultDepth = 1) {
128
+ const parseCsv = (value) => {
129
+ const normalized = String(value ?? '').trim();
130
+ if (!normalized) {
131
+ return undefined;
132
+ }
133
+ return normalized.split(',').map((item) => item.trim()).filter(Boolean);
134
+ };
135
+ const depthValue = req.param('relationshipDepth') ?? req.query.relationshipDepth;
136
+ const parsedDepth = Number(depthValue);
137
+ const fields = String(req.param('fields') ?? req.query.fields ?? '').trim().toLowerCase();
138
+ return {
139
+ depth: Number.isFinite(parsedDepth) && parsedDepth >= 0 ? parsedDepth : defaultDepth,
140
+ includeRelationIds: parseCsv(req.param('relationshipIds') ?? req.query.relationshipIds),
141
+ includeRecordTypes: parseCsv(req.param('recordTypes') ?? req.query.recordTypes),
142
+ fields: fields === 'summary' ? 'summary' : 'full',
143
+ };
144
+ }
145
+ hasViewAccess(brand, user, record) {
146
+ const currentUser = user ?? {};
147
+ const roles = (currentUser['roles'] ?? []);
148
+ return this.RecordsService.hasViewAccess(brand, currentUser, roles, record);
149
+ }
150
+ async filterRelationshipGraphByAccess(brand, user, graph) {
151
+ const filteredRelatedObjects = {};
152
+ const allowedTargetOids = new Set();
153
+ const omittedByAccess = { ...(graph.omittedByAccess ?? {}) };
154
+ for (const [recordType, records] of Object.entries(graph.relatedObjects ?? {})) {
155
+ const keptRecords = [];
156
+ for (const recordValue of (records ?? [])) {
157
+ const record = (recordValue ?? {});
158
+ const recordOid = String(record.redboxOid ?? '').trim();
159
+ if (!recordOid) {
160
+ continue;
161
+ }
162
+ const hasAccess = recordOid === graph.rootOid || await this.hasViewAccess(brand, user, record);
163
+ if (hasAccess) {
164
+ allowedTargetOids.add(recordOid);
165
+ keptRecords.push(record);
166
+ }
167
+ }
168
+ if (keptRecords.length > 0) {
169
+ filteredRelatedObjects[recordType] = keptRecords;
170
+ }
171
+ }
172
+ const filteredEdges = (graph.edges ?? []).filter((edge) => {
173
+ if (allowedTargetOids.has(edge.targetOid) || edge.targetOid === graph.rootOid) {
174
+ return true;
175
+ }
176
+ omittedByAccess[edge.relationId] = Number(omittedByAccess[edge.relationId] ?? 0) + 1;
177
+ return false;
178
+ });
179
+ return {
180
+ rootOid: graph.rootOid,
181
+ edges: filteredEdges,
182
+ relatedObjects: filteredRelatedObjects,
183
+ omittedByAccess,
184
+ };
185
+ }
123
186
  async getPermissions(req, res) {
124
- const oid = req.param('oid');
187
+ const validated = (0, index_1.getValidatedApiRequest)(req);
188
+ const oid = validated.params.oid;
125
189
  try {
126
190
  const record = await this.RecordsService.getMeta(oid);
127
- return this.sendResp(req, res, { data: record["authorization"] });
191
+ return this.sendResp(req, res, { data: record['authorization'] });
128
192
  }
129
193
  catch (err) {
130
194
  return this.sendResp(req, res, {
131
195
  errors: [this.asError(err)],
132
- displayErrors: [{ detail: 'Failed to get record permission.' }]
196
+ displayErrors: [{ detail: 'Failed to get record permission.' }],
133
197
  });
134
198
  }
135
199
  }
136
200
  async addUserEdit(req, res) {
137
201
  const brand = BrandingService.getBrand(req.session.branding);
138
- const oid = req.param('oid');
139
- const body = req.body;
140
- const users = body["users"];
141
- const pendingUsers = body["pendingUsers"];
202
+ const validated = (0, index_1.getValidatedApiRequest)(req);
203
+ const oid = validated.params.oid;
204
+ const body = validated.body;
205
+ const users = body['users'];
206
+ const pendingUsers = body['pendingUsers'];
142
207
  let record;
143
208
  try {
144
209
  record = await this.RecordsService.getMeta(oid);
145
210
  if (users != null && users.length > 0) {
146
- record.authorization.edit = _.union(record["authorization"]["edit"], users);
211
+ record.authorization.edit = _.union(record['authorization']['edit'], users);
147
212
  }
148
213
  if (pendingUsers != null && pendingUsers.length > 0) {
149
- record.authorization.editPending = _.union(record["authorization"]["editPending"], pendingUsers);
214
+ record.authorization.editPending = _.union(record['authorization']['editPending'], pendingUsers);
150
215
  }
151
216
  }
152
217
  catch (err) {
153
218
  return this.sendResp(req, res, {
154
219
  errors: [this.asError(err)],
155
- displayErrors: [{ detail: 'Failed to modify record meta for adding an editor.' }]
220
+ displayErrors: [{ detail: 'Failed to modify record meta for adding an editor.' }],
156
221
  });
157
222
  }
158
223
  try {
@@ -160,39 +225,40 @@ var Controllers;
160
225
  if (!result.isSuccessful()) {
161
226
  return this.sendResp(req, res, {
162
227
  status: 500,
163
- displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
228
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
164
229
  });
165
230
  }
166
231
  const recordResult = await this.RecordsService.getMeta(result.oid);
167
- return this.sendResp(req, res, { data: recordResult["authorization"] });
232
+ return this.sendResp(req, res, { data: recordResult['authorization'] });
168
233
  }
169
234
  catch (err) {
170
235
  return this.sendResp(req, res, {
171
236
  errors: [this.asError(err)],
172
- displayErrors: [{ detail: 'Failed adding an editor.' }]
237
+ displayErrors: [{ detail: 'Failed adding an editor.' }],
173
238
  });
174
239
  }
175
240
  }
176
241
  async addUserView(req, res) {
177
242
  const brand = BrandingService.getBrand(req.session.branding);
178
- const oid = req.param('oid');
179
- const body = req.body;
180
- const users = body["users"];
181
- const pendingUsers = body["pendingUsers"];
243
+ const validated = (0, index_1.getValidatedApiRequest)(req);
244
+ const oid = validated.params.oid;
245
+ const body = validated.body;
246
+ const users = body['users'];
247
+ const pendingUsers = body['pendingUsers'];
182
248
  let record;
183
249
  try {
184
250
  record = await this.RecordsService.getMeta(oid);
185
251
  if (users != null && users.length > 0) {
186
- record["authorization"]["view"] = _.union(record["authorization"]["view"], users);
252
+ record['authorization']['view'] = _.union(record['authorization']['view'], users);
187
253
  }
188
254
  if (pendingUsers != null && pendingUsers.length > 0) {
189
- record["authorization"]["viewPending"] = _.union(record["authorization"]["viewPending"], pendingUsers);
255
+ record['authorization']['viewPending'] = _.union(record['authorization']['viewPending'], pendingUsers);
190
256
  }
191
257
  }
192
258
  catch (err) {
193
259
  return this.sendResp(req, res, {
194
260
  errors: [this.asError(err)],
195
- displayErrors: [{ detail: 'Failed getting record meta for adding a viewer.' }]
261
+ displayErrors: [{ detail: 'Failed getting record meta for adding a viewer.' }],
196
262
  });
197
263
  }
198
264
  try {
@@ -200,39 +266,40 @@ var Controllers;
200
266
  if (!result.isSuccessful()) {
201
267
  return this.sendResp(req, res, {
202
268
  status: 500,
203
- displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
269
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
204
270
  });
205
271
  }
206
- const resultRecord = await this.RecordsService.getMeta(result["oid"]);
207
- return this.sendResp(req, res, { data: resultRecord["authorization"] });
272
+ const resultRecord = await this.RecordsService.getMeta(result['oid']);
273
+ return this.sendResp(req, res, { data: resultRecord['authorization'] });
208
274
  }
209
275
  catch (err) {
210
276
  return this.sendResp(req, res, {
211
277
  errors: [this.asError(err)],
212
- displayErrors: [{ detail: 'Failed adding a viewer.' }]
278
+ displayErrors: [{ detail: 'Failed adding a viewer.' }],
213
279
  });
214
280
  }
215
281
  }
216
282
  async removeUserEdit(req, res) {
217
283
  const brand = BrandingService.getBrand(req.session.branding);
218
- const oid = req.param('oid');
219
- const body = req.body;
220
- const users = body["users"];
221
- const pendingUsers = body["pendingUsers"];
284
+ const validated = (0, index_1.getValidatedApiRequest)(req);
285
+ const oid = validated.params.oid;
286
+ const body = validated.body;
287
+ const users = body['users'];
288
+ const pendingUsers = body['pendingUsers'];
222
289
  let record;
223
290
  try {
224
291
  record = await this.RecordsService.getMeta(oid);
225
292
  if (users != null && users.length > 0) {
226
- record["authorization"]["edit"] = _.difference(record["authorization"]["edit"], users);
293
+ record['authorization']['edit'] = _.difference(record['authorization']['edit'], users);
227
294
  }
228
295
  if (pendingUsers != null && pendingUsers.length > 0) {
229
- record["authorization"]["editPending"] = _.difference(record["authorization"]["editPending"], pendingUsers);
296
+ record['authorization']['editPending'] = _.difference(record['authorization']['editPending'], pendingUsers);
230
297
  }
231
298
  }
232
299
  catch (err) {
233
300
  return this.sendResp(req, res, {
234
301
  errors: [this.asError(err)],
235
- displayErrors: [{ detail: 'Failed getting record meta for removing an editor.' }]
302
+ displayErrors: [{ detail: 'Failed getting record meta for removing an editor.' }],
236
303
  });
237
304
  }
238
305
  try {
@@ -240,39 +307,40 @@ var Controllers;
240
307
  if (!result.isSuccessful()) {
241
308
  return this.sendResp(req, res, {
242
309
  status: 500,
243
- displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
310
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
244
311
  });
245
312
  }
246
- const resultRecord = await this.RecordsService.getMeta(result["oid"]);
247
- return this.sendResp(req, res, { data: resultRecord["authorization"] });
313
+ const resultRecord = await this.RecordsService.getMeta(result['oid']);
314
+ return this.sendResp(req, res, { data: resultRecord['authorization'] });
248
315
  }
249
316
  catch (err) {
250
317
  return this.sendResp(req, res, {
251
318
  errors: [this.asError(err)],
252
- displayErrors: [{ detail: 'Failed removing an editor.' }]
319
+ displayErrors: [{ detail: 'Failed removing an editor.' }],
253
320
  });
254
321
  }
255
322
  }
256
323
  async removeUserView(req, res) {
257
324
  const brand = BrandingService.getBrand(req.session.branding);
258
- const oid = req.param('oid');
259
- const body = req.body;
260
- const users = body["users"];
261
- const pendingUsers = body["pendingUsers"];
325
+ const validated = (0, index_1.getValidatedApiRequest)(req);
326
+ const oid = validated.params.oid;
327
+ const body = validated.body;
328
+ const users = body['users'];
329
+ const pendingUsers = body['pendingUsers'];
262
330
  let record;
263
331
  try {
264
332
  record = await this.RecordsService.getMeta(oid);
265
333
  if (users != null && users.length > 0) {
266
- record["authorization"]["view"] = _.difference(record["authorization"]["view"], users);
334
+ record['authorization']['view'] = _.difference(record['authorization']['view'], users);
267
335
  }
268
336
  if (pendingUsers != null && pendingUsers.length > 0) {
269
- record["authorization"]["viewPending"] = _.difference(record["authorization"]["viewPending"], pendingUsers);
337
+ record['authorization']['viewPending'] = _.difference(record['authorization']['viewPending'], pendingUsers);
270
338
  }
271
339
  }
272
340
  catch (err) {
273
341
  return this.sendResp(req, res, {
274
342
  errors: [this.asError(err)],
275
- displayErrors: [{ detail: 'Failed to modify record meta for removing a viewer.' }]
343
+ displayErrors: [{ detail: 'Failed to modify record meta for removing a viewer.' }],
276
344
  });
277
345
  }
278
346
  try {
@@ -280,42 +348,55 @@ var Controllers;
280
348
  if (!result.isSuccessful()) {
281
349
  return this.sendResp(req, res, {
282
350
  status: 500,
283
- displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
351
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
284
352
  });
285
353
  }
286
- const resultRecord = await this.RecordsService.getMeta(result["oid"]);
287
- return this.sendResp(req, res, { data: resultRecord["authorization"] });
354
+ const resultRecord = await this.RecordsService.getMeta(result['oid']);
355
+ return this.sendResp(req, res, { data: resultRecord['authorization'] });
288
356
  }
289
357
  catch (err) {
290
358
  return this.sendResp(req, res, {
291
359
  errors: [this.asError(err)],
292
- displayErrors: [{ detail: 'Failed removing a viewer.' }]
360
+ displayErrors: [{ detail: 'Failed removing a viewer.' }],
293
361
  });
294
362
  }
295
363
  }
296
364
  async getMeta(req, res) {
297
- const oid = req.param('oid');
365
+ const validated = (0, index_1.getValidatedApiRequest)(req);
366
+ const oid = validated.params.oid;
367
+ const brand = BrandingService.getBrand(req.session.branding);
298
368
  try {
299
369
  const record = await this.RecordsService.getMeta(oid);
300
370
  if (_.isEmpty(record)) {
301
371
  return this.sendResp(req, res, {
302
372
  status: 400,
303
- displayErrors: [{ detail: `Failed to get meta, cannot find existing record with oid: ${oid}` }]
373
+ displayErrors: [{ detail: `Failed to get meta, cannot find existing record with oid: ${oid}` }],
304
374
  });
305
375
  }
306
- return this.sendResp(req, res, { data: record["metadata"] });
376
+ if (!this.shouldIncludeRelationships(req)) {
377
+ return this.sendResp(req, res, { data: record["metadata"] });
378
+ }
379
+ const relationships = await this.RecordsService.getRelatedRecords(oid, brand, this.parseRelationshipExpandOptions(req, 1));
380
+ const filteredRelationships = await this.filterRelationshipGraphByAccess(brand, req.user ?? {}, relationships);
381
+ return this.sendResp(req, res, {
382
+ data: {
383
+ metadata: record["metadata"],
384
+ relationships: filteredRelationships,
385
+ }
386
+ });
307
387
  }
308
388
  catch (err) {
309
389
  return this.sendResp(req, res, {
310
390
  errors: [this.asError(err)],
311
- displayErrors: [{ detail: "Get Metadata failed." }]
391
+ displayErrors: [{ detail: 'Get Metadata failed.' }],
312
392
  });
313
393
  }
314
394
  }
315
395
  async getRecordAudit(req, res) {
316
- const oid = req.param('oid');
317
- const dateFrom = req.param('dateFrom');
318
- const dateTo = req.param('dateTo');
396
+ const validated = (0, index_1.getValidatedApiRequest)(req);
397
+ const oid = validated.params.oid;
398
+ const dateFrom = validated.query.dateFrom;
399
+ const dateTo = validated.query.dateTo;
319
400
  const params = { oid, dateFrom: null, dateTo: null };
320
401
  if (!_.isEmpty(dateFrom)) {
321
402
  params['dateFrom'] = new Date(dateFrom);
@@ -334,7 +415,7 @@ var Controllers;
334
415
  catch (err) {
335
416
  return this.sendResp(req, res, {
336
417
  errors: [this.asError(err)],
337
- displayErrors: [{ detail: `Failed to list audit records for ${oid}, please.` }]
418
+ displayErrors: [{ detail: `Failed to list audit records for ${oid}, please.` }],
338
419
  });
339
420
  }
340
421
  }
@@ -342,35 +423,40 @@ var Controllers;
342
423
  const brand = BrandingService.getBrand(req.session.branding);
343
424
  sails.log.debug('brand is...');
344
425
  sails.log.debug(brand);
345
- const oid = req.param('oid');
426
+ const validated = (0, index_1.getValidatedApiRequest)(req);
427
+ const oid = validated.params.oid;
346
428
  try {
347
429
  const record = await this.RecordsService.getMeta(oid);
348
- return this.sendResp(req, res, { data: record["metaMetadata"] });
430
+ return this.sendResp(req, res, { data: record['metaMetadata'] });
349
431
  }
350
432
  catch (err) {
351
433
  return this.sendResp(req, res, {
352
434
  errors: [this.asError(err)],
353
- displayErrors: [{ detail: `Failed to get object meta for ${oid}, please.`, meta: { oid } }]
435
+ displayErrors: [{ detail: `Failed to get object meta for ${oid}, please.`, meta: { oid } }],
354
436
  });
355
437
  }
356
438
  }
357
439
  async updateMeta(req, res) {
358
440
  const brand = BrandingService.getBrand(req.session.branding);
359
- const oid = req.param('oid');
360
- const shouldMerge = req.param('merge') === 'true';
361
- const shouldProcessDatastreams = req.param('datastreams') === 'true';
441
+ const validated = (0, index_1.getValidatedApiRequest)(req);
442
+ const oid = validated.params.oid;
443
+ const body = validated.body;
444
+ const shouldMerge = validated.query.merge === true;
445
+ const shouldProcessDatastreams = validated.query.datastreams === true;
362
446
  let record;
363
447
  try {
364
448
  record = await this.RecordsService.getMeta(oid);
365
449
  if (_.isEmpty(record)) {
366
450
  return this.sendResp(req, res, {
367
451
  status: 400,
368
- displayErrors: [{ detail: `Failed to update meta, cannot find existing record with oid: ${oid}.`, meta: { oid } }]
452
+ displayErrors: [
453
+ { detail: `Failed to update meta, cannot find existing record with oid: ${oid}.`, meta: { oid } },
454
+ ],
369
455
  });
370
456
  }
371
457
  if (shouldMerge) {
372
458
  // behavior modified from replacing arrays to appending to arrays:
373
- record["metadata"] = _.mergeWith(record.metadata, req.body, (objValue, srcValue) => {
459
+ record['metadata'] = _.mergeWith(record.metadata, body, (objValue, srcValue) => {
374
460
  if (_.isArray(objValue)) {
375
461
  return objValue.concat(srcValue);
376
462
  }
@@ -378,13 +464,13 @@ var Controllers;
378
464
  });
379
465
  }
380
466
  else {
381
- record["metadata"] = req.body;
467
+ record['metadata'] = body;
382
468
  }
383
469
  }
384
470
  catch (err) {
385
471
  return this.sendResp(req, res, {
386
472
  errors: [this.asError(err)],
387
- displayErrors: [{ detail: "Update Metadata failed." }]
473
+ displayErrors: [{ detail: 'Update Metadata failed.' }],
388
474
  });
389
475
  }
390
476
  try {
@@ -407,46 +493,50 @@ var Controllers;
407
493
  catch (err) {
408
494
  return this.sendResp(req, res, {
409
495
  errors: [this.asError(err)],
410
- displayErrors: [{ detail: "Update Metadata failed" }]
496
+ displayErrors: [{ detail: 'Update Metadata failed' }],
411
497
  });
412
498
  }
413
499
  }
414
500
  async updateObjectMeta(req, res) {
415
501
  const brand = BrandingService.getBrand(req.session.branding);
416
- const oid = req.param('oid');
502
+ const validated = (0, index_1.getValidatedApiRequest)(req);
503
+ const oid = validated.params.oid;
504
+ const body = validated.body;
417
505
  let record;
418
506
  try {
419
507
  record = await this.RecordsService.getMeta(oid);
420
- record["metaMetadata"] = req.body;
508
+ record['metaMetadata'] = body;
421
509
  }
422
510
  catch (err) {
423
- return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail: "Updated" }] });
511
+ return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail: 'Updated' }] });
424
512
  }
425
513
  try {
426
514
  const result = await this.RecordsService.updateMeta(brand, oid, record, req.user ?? {});
427
515
  return this.sendResp(req, res, { data: result });
428
516
  }
429
517
  catch (err) {
430
- return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail: "Updated" }] });
518
+ return this.sendResp(req, res, { errors: [this.asError(err)], displayErrors: [{ detail: 'Updated' }] });
431
519
  }
432
520
  }
433
521
  create(req, res) {
434
522
  const brand = BrandingService.getBrand(req.session.branding);
435
- const recordType = req.param('recordType');
523
+ const validated = (0, index_1.getValidatedApiRequest)(req);
524
+ const recordType = validated.params.recordType;
436
525
  const user = req.user ?? {};
437
- const body = req.body;
526
+ const body = validated.body;
438
527
  const that = this;
439
528
  if (body != null) {
440
529
  let authorizationEdit, authorizationView, authorizationEditPending, authorizationViewPending;
441
- if (body["authorization"] != null) {
442
- authorizationEdit = body["authorization"]["edit"];
443
- authorizationView = body["authorization"]["view"];
444
- authorizationEditPending = body["authorization"]["editPending"];
445
- authorizationViewPending = body["authorization"]["viewPending"];
530
+ const authorizationBody = body['authorization'];
531
+ if (authorizationBody != null) {
532
+ authorizationEdit = authorizationBody['edit'];
533
+ authorizationView = authorizationBody['view'];
534
+ authorizationEditPending = authorizationBody['editPending'];
535
+ authorizationViewPending = authorizationBody['viewPending'];
446
536
  }
447
537
  else {
448
538
  // If no authorization block set to user
449
- body["authorization"] = [];
539
+ body['authorization'] = [];
450
540
  authorizationEdit = [];
451
541
  authorizationView = [];
452
542
  authorizationEdit.push((req.user ?? {}).username);
@@ -456,25 +546,25 @@ var Controllers;
456
546
  edit: authorizationEdit,
457
547
  view: authorizationView,
458
548
  editPending: authorizationEditPending,
459
- viewPending: authorizationViewPending
549
+ viewPending: authorizationViewPending,
460
550
  };
461
551
  const recordTypeObservable = RecordTypesService.get(brand, recordType);
462
552
  recordTypeObservable.subscribe((recordTypeModel) => {
463
553
  if (recordTypeModel) {
464
- const metadata = body["metadata"];
465
- const workflowStage = body["workflowStage"];
554
+ const metadata = body['metadata'];
555
+ const workflowStage = body['workflowStage'];
466
556
  const request = {};
467
557
  //if no metadata field, no authorization
468
558
  if (metadata == null) {
469
- request["metadata"] = body;
559
+ request['metadata'] = body;
470
560
  }
471
561
  else {
472
- request["metadata"] = metadata;
562
+ request['metadata'] = metadata;
473
563
  }
474
- request["authorization"] = authorization;
564
+ request['authorization'] = authorization;
475
565
  const createPromise = this.RecordsService.create(brand, request, recordTypeModel, user);
476
566
  const obs = (0, rxjs_1.from)(createPromise);
477
- obs.subscribe((response) => {
567
+ obs.subscribe(response => {
478
568
  if (response.isSuccessful()) {
479
569
  if (workflowStage) {
480
570
  WorkflowStepsService.get(recordTypeModel, workflowStage).subscribe(wfStep => {
@@ -485,35 +575,40 @@ var Controllers;
485
575
  status: 201,
486
576
  data: response,
487
577
  headers: {
488
- 'Location': sails.config.appUrl + BrandingService.getBrandAndPortalPath(req) + "/api/records/metadata/" + response.oid,
489
- }
578
+ Location: sails.config.appUrl +
579
+ BrandingService.getBrandAndPortalPath(req) +
580
+ '/api/records/metadata/' +
581
+ response.oid,
582
+ },
490
583
  });
491
584
  }
492
585
  else {
493
586
  return this.sendResp(req, res, {
494
587
  status: 500,
495
- displayErrors: [{ detail: "Create Record failed" }]
588
+ displayErrors: [{ detail: 'Create Record failed' }],
496
589
  });
497
590
  }
498
591
  }, (error) => {
499
592
  return this.sendResp(req, res, {
500
593
  errors: [this.asError(error)],
501
- displayErrors: [{ detail: "Create Record failed" }]
594
+ displayErrors: [{ detail: 'Create Record failed' }],
502
595
  });
503
596
  });
504
597
  return;
505
598
  }
506
599
  else {
507
600
  return this.sendResp(req, res, {
508
- status: 400, displayErrors: [{ detail: "Record Type provided is not valid" }]
601
+ status: 400,
602
+ displayErrors: [{ detail: 'Record Type provided is not valid' }],
509
603
  });
510
604
  }
511
605
  });
512
606
  }
513
607
  }
514
608
  async getDataStream(req, res) {
515
- const oid = req.param('oid');
516
- const datastreamId = req.param('datastreamId');
609
+ const validated = (0, index_1.getValidatedApiRequest)(req);
610
+ const oid = validated.params.oid;
611
+ const datastreamId = validated.params.datastreamId;
517
612
  sails.log.debug(`getDataStream ${oid} ${datastreamId}`);
518
613
  try {
519
614
  let found = null;
@@ -531,17 +626,17 @@ var Controllers;
531
626
  // Set octet stream as a default
532
627
  mimeType = 'application/octet-stream';
533
628
  }
534
- const fileName = req.param('fileName') ? req.param('fileName') : found.name ? found.name : datastreamId;
629
+ const fileName = validated.query.fileName ? String(validated.query.fileName) : found.name ? found.name : datastreamId;
535
630
  res.set('Content-Type', 'application/octet-stream');
536
631
  const size = found.size;
537
632
  if (!_.isEmpty(size)) {
538
633
  res.set('Content-Length', size);
539
634
  }
540
- sails.log.verbose("fileName " + fileName);
635
+ sails.log.verbose('fileName ' + fileName);
541
636
  res.attachment(fileName);
542
637
  sails.log.info(`Returning datastream observable of ${oid}: ${fileName}, datastreamId: ${datastreamId}`);
543
638
  try {
544
- const response = await this.DatastreamService.getDatastream(oid, datastreamId);
639
+ const response = await this.DatastreamService.getDatastream(oid, datastreamId, { username: String(req.user?.username ?? '') || undefined });
545
640
  if (response.readstream) {
546
641
  response.readstream.on('error', (error) => {
547
642
  // Handle the error here
@@ -560,28 +655,35 @@ var Controllers;
560
655
  catch (error) {
561
656
  return this.sendResp(req, res, {
562
657
  errors: [this.asError(error)],
563
- displayErrors: [{ detail: 'There was a problem with the upstream request.' }]
658
+ displayErrors: [{ detail: 'There was a problem with the upstream request.' }],
564
659
  });
565
660
  }
566
661
  }
567
662
  catch (error) {
568
663
  return this.sendResp(req, res, {
569
664
  errors: [this.asError(error)],
570
- displayErrors: [{ detail: 'There was a problem with the upstream request.' }]
665
+ displayErrors: [{ detail: 'There was a problem with the upstream request.' }],
571
666
  });
572
667
  }
573
668
  }
574
669
  async addDataStreams(req, res) {
575
- const oid = req.param('oid');
670
+ const validated = (0, index_1.getValidatedApiRequest)(req);
671
+ const oid = validated.params.oid;
576
672
  const self = this;
577
673
  const attachmentsDir = sails.config.record.attachments.file?.directory ?? sails.config.record.attachments.stageDir;
578
674
  if (!attachmentsDir) {
579
675
  return this.sendResp(req, res, {
580
676
  status: 500,
581
- displayErrors: [{ detail: 'Attachment directory is required: configure record.attachments.file.directory or record.attachments.stageDir.' }]
677
+ displayErrors: [
678
+ {
679
+ detail: 'Attachment directory is required: configure record.attachments.file.directory or record.attachments.stageDir.',
680
+ },
681
+ ],
582
682
  });
583
683
  }
584
- req.file('attachmentFields').upload({
684
+ req
685
+ .file('attachmentFields')
686
+ .upload({
585
687
  dirname: `${attachmentsDir}`,
586
688
  maxBytes: 104857600,
587
689
  saveAs: function (__newFileStream, next) {
@@ -595,18 +697,40 @@ var Controllers;
595
697
  sails.log.error(error);
596
698
  return next(new Error(`Could not determine an appropriate filename for uploaded filestream(s) for oid ${oid}.`));
597
699
  }
598
- }
700
+ },
599
701
  }, async function (error, UploadedFileMetadata) {
600
702
  if (error) {
601
703
  return self.sendResp(req, res, {
602
704
  errors: [self.asError(error)],
603
- displayErrors: [{ detail: `There was a problem adding datastream(s) to: ${attachmentsDir}` }]
705
+ displayErrors: [{ detail: `There was a problem adding datastream(s) to: ${attachmentsDir}` }],
706
+ headers: self.getNoCacheHeaders(),
604
707
  });
605
708
  }
709
+ const uploadedFiles = Array.isArray(UploadedFileMetadata) ? UploadedFileMetadata : [];
710
+ const fileValidation = (0, index_1.validateApiRouteFiles)(index_1.addDataStreamsRoute, {
711
+ attachmentFields: uploadedFiles,
712
+ });
713
+ if (!fileValidation.valid) {
714
+ return self.sendResp(req, res, {
715
+ status: 400,
716
+ displayErrors: fileValidation.issues.map(i => ({ title: i.path, detail: i.message })),
717
+ headers: self.getNoCacheHeaders(),
718
+ });
719
+ }
720
+ const validated = (0, index_1.getValidatedApiRequest)(req);
721
+ req.apiRequest = {
722
+ ...validated,
723
+ files: { attachmentFields: uploadedFiles },
724
+ };
606
725
  sails.log.verbose(UploadedFileMetadata);
607
726
  sails.log.verbose('Succesfully uploaded all file metadata. Sending locations downstream....');
608
727
  const fileIds = UploadedFileMetadata.map(function (nextDescriptor) {
609
- return new index_1.Datastream({ fileId: path.relative(attachmentsDir, nextDescriptor.fd), name: nextDescriptor.filename, mimeType: nextDescriptor.type, size: nextDescriptor.size });
728
+ return new index_1.Datastream({
729
+ fileId: path.relative(attachmentsDir, nextDescriptor.fd),
730
+ name: nextDescriptor.filename,
731
+ mimeType: nextDescriptor.type,
732
+ size: nextDescriptor.size,
733
+ });
610
734
  });
611
735
  sails.log.verbose('files to send upstream are:');
612
736
  sails.log.verbose(_.toString(fileIds));
@@ -615,20 +739,23 @@ var Controllers;
615
739
  const result = await self.DatastreamService.addDatastreams(oid, fileIds);
616
740
  sails.log.verbose(`Done with updating streams and returning response...`);
617
741
  if (result.isSuccessful()) {
618
- sails.log.verbose("Presuming success...");
742
+ sails.log.verbose('Presuming success...');
619
743
  _.merge(result, { fileIds: fileIds });
620
744
  return self.sendResp(req, res, { data: { message: result } });
621
745
  }
622
746
  else {
623
747
  return self.sendResp(req, res, {
624
- status: 500, displayErrors: [{ detail: defaultErrorMessage + " " + result.message }]
748
+ status: 500,
749
+ displayErrors: [{ detail: defaultErrorMessage + ' ' + result.message }],
750
+ headers: self.getNoCacheHeaders(),
625
751
  });
626
752
  }
627
753
  }
628
754
  catch (error) {
629
755
  return self.sendResp(req, res, {
630
756
  errors: [self.asError(error)],
631
- displayErrors: [{ detail: defaultErrorMessage }]
757
+ displayErrors: [{ detail: defaultErrorMessage }],
758
+ headers: self.getNoCacheHeaders(),
632
759
  });
633
760
  }
634
761
  });
@@ -639,12 +766,12 @@ var Controllers;
639
766
  **************************************************************************************************
640
767
  */
641
768
  /* Ad-hoc methods for listing records via api
642
- * Using DashboardService for getRecords similar (copied from
643
- * DashboardController) to DashboardService
644
- * Can be used for building reports or SPAs for redbox
645
- * TODO: Refactor DashboardController to use this and move DashboardService.getRecords
646
- * to RecordsService
647
- */
769
+ * Using DashboardService for getRecords similar (copied from
770
+ * DashboardController) to DashboardService
771
+ * Can be used for building reports or SPAs for redbox
772
+ * TODO: Refactor DashboardController to use this and move DashboardService.getRecords
773
+ * to RecordsService
774
+ */
648
775
  getDocMetadata(doc) {
649
776
  const metadata = {};
650
777
  for (const key in doc) {
@@ -677,22 +804,22 @@ var Controllers;
677
804
  const totalItems = results.totalItems;
678
805
  const startIndex = start;
679
806
  const noItems = rows;
680
- const pageNumber = Math.floor((startIndex / noItems) + 1);
807
+ const pageNumber = Math.floor(startIndex / noItems + 1);
681
808
  apiReponse.summary.numFound = totalItems;
682
809
  apiReponse.summary.start = startIndex;
683
810
  apiReponse.summary.page = pageNumber;
684
811
  const items = [];
685
- const docs = results["items"];
812
+ const docs = results['items'];
686
813
  for (let i = 0; i < docs.length; i++) {
687
814
  const doc = docs[i];
688
815
  const item = {};
689
- item["oid"] = doc["redboxOid"];
690
- const docMetadata = (doc["metadata"] ?? {});
691
- item["title"] = docMetadata["title"];
692
- item["metadata"] = docMetadata;
693
- item["dateCreated"] = doc["dateCreated"];
694
- item["dateModified"] = doc["lastSaveDate"];
695
- item["hasEditAccess"] = this.RecordsService.hasEditAccess(brand, user, roles, doc);
816
+ item['oid'] = doc['redboxOid'];
817
+ const docMetadata = (doc['metadata'] ?? {});
818
+ item['title'] = docMetadata['title'];
819
+ item['metadata'] = docMetadata;
820
+ item['dateCreated'] = doc['dateCreated'];
821
+ item['dateModified'] = doc['lastSaveDate'];
822
+ item['hasEditAccess'] = this.RecordsService.hasEditAccess(brand, user, roles, doc);
696
823
  items.push(item);
697
824
  }
698
825
  apiReponse.records = items;
@@ -718,23 +845,23 @@ var Controllers;
718
845
  const totalItems = results.totalItems;
719
846
  const startIndex = start;
720
847
  const noItems = rows;
721
- const pageNumber = Math.floor((startIndex / noItems) + 1);
848
+ const pageNumber = Math.floor(startIndex / noItems + 1);
722
849
  apiReponse.summary.numFound = totalItems;
723
850
  apiReponse.summary.start = startIndex;
724
851
  apiReponse.summary.page = pageNumber;
725
852
  const items = [];
726
- const docs = results["items"];
853
+ const docs = results['items'];
727
854
  for (let i = 0; i < docs.length; i++) {
728
855
  const doc = docs[i];
729
856
  const item = {};
730
- const deletedRecord = (doc["deletedRecordMetadata"] ?? {});
731
- const deletedRecordMetadata = (deletedRecord["metadata"] ?? {});
732
- item["oid"] = doc["redboxOid"];
733
- item["title"] = deletedRecordMetadata["title"];
734
- item["deletedRecord"] = deletedRecord;
735
- item["dateCreated"] = doc["dateCreated"];
736
- item["dateModified"] = doc["lastSaveDate"];
737
- item["dateDeleted"] = doc["dateDeleted"];
857
+ const deletedRecord = (doc['deletedRecordMetadata'] ?? {});
858
+ const deletedRecordMetadata = (deletedRecord['metadata'] ?? {});
859
+ item['oid'] = doc['redboxOid'];
860
+ item['title'] = deletedRecordMetadata['title'];
861
+ item['deletedRecord'] = deletedRecord;
862
+ item['dateCreated'] = doc['dateCreated'];
863
+ item['dateModified'] = doc['lastSaveDate'];
864
+ item['dateDeleted'] = doc['dateDeleted'];
738
865
  items.push(item);
739
866
  }
740
867
  apiReponse.records = items;
@@ -743,9 +870,11 @@ var Controllers;
743
870
  listRecords(req, res) {
744
871
  //sails.log.debug('api-list-records');
745
872
  const brand = BrandingService.getBrand(req.session.branding);
746
- const editAccessOnly = req.query.editOnly;
873
+ const validated = (0, index_1.getValidatedApiRequest)(req);
874
+ const { query } = validated;
875
+ const editAccessOnly = query.editOnly;
747
876
  let roles = [];
748
- let username = "guest";
877
+ let username = 'guest';
749
878
  let user = {};
750
879
  if (req.isAuthenticated()) {
751
880
  roles = req.user.roles;
@@ -758,14 +887,14 @@ var Controllers;
758
887
  roles = [];
759
888
  roles.push(RolesService.getDefUnathenticatedRole(brand));
760
889
  }
761
- const recordType = req.param('recordType');
762
- const workflowState = req.param('state');
763
- const start = req.param('start');
764
- const rows = req.param('rows');
765
- const packageType = req.param('packageType');
766
- const sort = req.param('sort');
767
- const filterFieldString = req.param('filterFields');
768
- let filterString = req.param('filter');
890
+ const recordType = query.recordType;
891
+ const workflowState = query.state;
892
+ const start = query.start;
893
+ const rows = query.rows;
894
+ const packageType = query.packageType;
895
+ const sort = query.sort;
896
+ const filterFieldString = query.filterFields;
897
+ let filterString = query.filter;
769
898
  let filterFields = undefined;
770
899
  if (!_.isEmpty(filterFieldString)) {
771
900
  filterFields = filterString.split(',');
@@ -779,8 +908,7 @@ var Controllers;
779
908
  else {
780
909
  // sails.log.debug(`getRecords: ${recordType} ${workflowState} ${start}`);
781
910
  // sails.log.debug(`${rows} ${packageType} ${sort}`);
782
- return this
783
- .getRecords(workflowState, recordType, start, rows, user, roles, brand, editAccessOnly, packageType, sort, filterFields, filterString)
911
+ return this.getRecords(workflowState, recordType, start, rows, user, roles, brand, editAccessOnly, packageType, sort, filterFields, filterString)
784
912
  .then(response => {
785
913
  this.sendResp(req, res, { data: response });
786
914
  })
@@ -790,12 +918,13 @@ var Controllers;
790
918
  }
791
919
  }
792
920
  async restoreRecord(req, res) {
793
- const oid = req.param('oid');
921
+ const validated = (0, index_1.getValidatedApiRequest)(req);
922
+ const oid = validated.params.oid;
794
923
  const user = req.user ?? {};
795
924
  if (_.isEmpty(oid)) {
796
925
  return this.sendResp(req, res, {
797
926
  status: 400,
798
- displayErrors: [{ detail: "Missing ID of record." }]
927
+ displayErrors: [{ detail: 'Missing ID of record.' }],
799
928
  });
800
929
  }
801
930
  const response = await this.RecordsService.restoreRecord(oid, user);
@@ -807,31 +936,33 @@ var Controllers;
807
936
  sails.log.verbose(JSON.stringify(response));
808
937
  return this.sendResp(req, res, {
809
938
  status: 500,
810
- displayErrors: [{ title: response.message, detail: String(response.details ?? '') }]
939
+ displayErrors: [{ title: response.message, detail: String(response.details ?? '') }],
811
940
  });
812
941
  }
813
942
  }
814
943
  async deleteRecord(req, res) {
815
- const oid = req.param('oid');
944
+ const validated = (0, index_1.getValidatedApiRequest)(req);
945
+ const oid = validated.params.oid;
816
946
  const permanentlyDelete = req.query.permanent === 'true';
817
947
  const user = req.user ?? {};
818
948
  if (_.isEmpty(oid)) {
819
949
  return this.sendResp(req, res, {
820
- status: 400, displayErrors: [{ detail: "Missing ID of record." }]
950
+ status: 400,
951
+ displayErrors: [{ detail: 'Missing ID of record.' }],
821
952
  });
822
953
  }
823
954
  const record = await this.RecordsService.getMeta(oid);
824
955
  if (_.isEmpty(record)) {
825
956
  return this.sendResp(req, res, {
826
957
  status: 400,
827
- displayErrors: [{ detail: "Record not found!" }]
958
+ displayErrors: [{ detail: 'Record not found!' }],
828
959
  });
829
960
  }
830
961
  const brand = BrandingService.getBrand(req.session.branding);
831
962
  if (_.isEmpty(brand)) {
832
963
  return this.sendResp(req, res, {
833
964
  status: 400,
834
- displayErrors: [{ detail: "Missing brand." }]
965
+ displayErrors: [{ detail: 'Missing brand.' }],
835
966
  });
836
967
  }
837
968
  const recordType = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, record.metaMetadata.type));
@@ -842,17 +973,23 @@ var Controllers;
842
973
  else {
843
974
  return this.sendResp(req, res, {
844
975
  status: 500,
845
- displayErrors: [{ title: response.message, detail: `${String(response.details ?? '')} Delete attempt failed for OID: ${oid}` }]
976
+ displayErrors: [
977
+ {
978
+ title: response.message,
979
+ detail: `${String(response.details ?? '')} Delete attempt failed for OID: ${oid}`,
980
+ },
981
+ ],
846
982
  });
847
983
  }
848
984
  }
849
985
  async destroyDeletedRecord(req, res) {
850
- const oid = req.param('oid');
986
+ const validated = (0, index_1.getValidatedApiRequest)(req);
987
+ const oid = validated.params.oid;
851
988
  const user = req.user ?? {};
852
989
  if (_.isEmpty(oid)) {
853
990
  return this.sendResp(req, res, {
854
991
  status: 400,
855
- displayErrors: [{ detail: "Missing ID of record." }]
992
+ displayErrors: [{ detail: 'Missing ID of record.' }],
856
993
  });
857
994
  }
858
995
  const response = await this.RecordsService.destroyDeletedRecord(oid, user);
@@ -861,30 +998,39 @@ var Controllers;
861
998
  }
862
999
  else {
863
1000
  return this.sendResp(req, res, {
864
- status: 500, displayErrors: [{ title: response.message, detail: `${String(response.details ?? '')} Destroy attempt failed for OID: ${oid}` }]
1001
+ status: 500,
1002
+ displayErrors: [
1003
+ {
1004
+ title: response.message,
1005
+ detail: `${String(response.details ?? '')} Destroy attempt failed for OID: ${oid}`,
1006
+ },
1007
+ ],
865
1008
  });
866
1009
  }
867
1010
  }
868
1011
  async transitionWorkflow(req, res) {
869
- const oid = req.param('oid');
870
- const targetStepName = req.param('targetStep');
1012
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1013
+ const oid = validated.params.oid;
1014
+ const targetStepName = validated.params.targetStep;
871
1015
  try {
872
1016
  if (_.isEmpty(oid)) {
873
1017
  return this.sendResp(req, res, {
874
1018
  status: 400,
875
- displayErrors: [{ detail: "Missing ID of record." }]
1019
+ displayErrors: [{ detail: 'Missing ID of record.' }],
876
1020
  });
877
1021
  }
878
1022
  const brand = BrandingService.getBrand(req.session.branding);
879
1023
  const record = await this.RecordsService.getMeta(oid);
880
1024
  if (_.isEmpty(record)) {
881
1025
  return this.sendResp(req, res, {
882
- status: 500, displayErrors: [{ detail: `Missing OID: ${oid}` }]
1026
+ status: 500,
1027
+ displayErrors: [{ detail: `Missing OID: ${oid}` }],
883
1028
  });
884
1029
  }
885
1030
  if (!this.RecordsService.hasEditAccess(brand, req.user ?? {}, (req.user ?? {}).roles ?? [], record)) {
886
1031
  return this.sendResp(req, res, {
887
- status: 500, displayErrors: [{ detail: `User has no edit permissions for :${oid}` }]
1032
+ status: 500,
1033
+ displayErrors: [{ detail: `User has no edit permissions for :${oid}` }],
888
1034
  });
889
1035
  }
890
1036
  const recType = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, record.metaMetadata.type));
@@ -895,19 +1041,21 @@ var Controllers;
895
1041
  catch (err) {
896
1042
  return this.sendResp(req, res, {
897
1043
  errors: [this.asError(err)],
898
- displayErrors: [{ detail: `Failed to transition workflow to ${targetStepName} for oid ${oid}.` }]
1044
+ displayErrors: [{ detail: `Failed to transition workflow to ${targetStepName} for oid ${oid}.` }],
899
1045
  });
900
1046
  }
901
1047
  }
902
1048
  async listDatastreams(req, res) {
903
- const oid = req.param('oid');
1049
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1050
+ const oid = validated.params.oid;
904
1051
  if (_.isEmpty(oid)) {
905
1052
  return this.sendResp(req, res, {
906
- status: 400, displayErrors: [{ detail: "Missing ID of record." }]
1053
+ status: 400,
1054
+ displayErrors: [{ detail: 'Missing ID of record.' }],
907
1055
  });
908
1056
  }
909
1057
  try {
910
- const attachments = await this.RecordsService.getAttachments(oid);
1058
+ const attachments = await this.RecordsService.getAttachments(oid, undefined, { username: String(req.user?.username ?? '') || undefined });
911
1059
  sails.log.verbose(JSON.stringify(attachments));
912
1060
  const response = new index_1.ListAPIResponse();
913
1061
  response.summary.numFound = _.size(attachments);
@@ -918,61 +1066,64 @@ var Controllers;
918
1066
  catch (err) {
919
1067
  return this.sendResp(req, res, {
920
1068
  errors: [this.asError(err)],
921
- displayErrors: [{ detail: `Failed to list attachments for ${oid}, pleas.` }]
1069
+ displayErrors: [{ detail: `Failed to list attachments for ${oid}, pleas.` }],
922
1070
  });
923
1071
  }
924
1072
  }
925
1073
  async addRoleEdit(req, res) {
926
1074
  const brand = BrandingService.getBrand(req.session.branding);
927
- const oid = req.param('oid');
928
- const body = req.body;
929
- const roles = body["roles"];
1075
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1076
+ const oid = validated.params.oid;
1077
+ const body = validated.body;
1078
+ const roles = body['roles'];
930
1079
  let record;
931
1080
  try {
932
1081
  record = await this.RecordsService.getMeta(oid);
933
1082
  if (roles != null && roles.length > 0) {
934
- record["authorization"]["editRoles"] = _.union(record["authorization"]["editRoles"], roles);
1083
+ record['authorization']['editRoles'] = _.union(record['authorization']['editRoles'], roles);
935
1084
  }
936
1085
  }
937
1086
  catch (err) {
938
1087
  return this.sendResp(req, res, {
939
1088
  errors: [this.asError(err)],
940
- displayErrors: [{ detail: 'Failed adding an editor role.' }]
1089
+ displayErrors: [{ detail: 'Failed adding an editor role.' }],
941
1090
  });
942
1091
  }
943
1092
  try {
944
1093
  const result = await this.RecordsService.updateMeta(brand, oid, record, req.user ?? {});
945
1094
  if (!result.isSuccessful()) {
946
1095
  return this.sendResp(req, res, {
947
- status: 500, displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
1096
+ status: 500,
1097
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
948
1098
  });
949
1099
  }
950
1100
  const recordResult = await this.RecordsService.getMeta(result.oid);
951
- return this.sendResp(req, res, { data: recordResult["authorization"] });
1101
+ return this.sendResp(req, res, { data: recordResult['authorization'] });
952
1102
  }
953
1103
  catch (err) {
954
1104
  return this.sendResp(req, res, {
955
1105
  errors: [this.asError(err)],
956
- displayErrors: [{ detail: 'Failed adding an editor role.' }]
1106
+ displayErrors: [{ detail: 'Failed adding an editor role.' }],
957
1107
  });
958
1108
  }
959
1109
  }
960
1110
  async addRoleView(req, res) {
961
1111
  const brand = BrandingService.getBrand(req.session.branding);
962
- const oid = req.param('oid');
963
- const body = req.body;
964
- const roles = body["roles"];
1112
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1113
+ const oid = validated.params.oid;
1114
+ const body = validated.body;
1115
+ const roles = body['roles'];
965
1116
  let record;
966
1117
  try {
967
1118
  record = await this.RecordsService.getMeta(oid);
968
1119
  if (roles != null && roles.length > 0) {
969
- record["authorization"]["viewRoles"] = _.union(record["authorization"]["viewRoles"], roles);
1120
+ record['authorization']['viewRoles'] = _.union(record['authorization']['viewRoles'], roles);
970
1121
  }
971
1122
  }
972
1123
  catch (err) {
973
1124
  return this.sendResp(req, res, {
974
1125
  errors: [this.asError(err)],
975
- displayErrors: [{ detail: 'Failed getting record meta for adding a viewer role.' }]
1126
+ displayErrors: [{ detail: 'Failed getting record meta for adding a viewer role.' }],
976
1127
  });
977
1128
  }
978
1129
  try {
@@ -980,35 +1131,36 @@ var Controllers;
980
1131
  if (!result.isSuccessful()) {
981
1132
  return this.sendResp(req, res, {
982
1133
  status: 500,
983
- displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
1134
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
984
1135
  });
985
1136
  }
986
- const resultRecord = await this.RecordsService.getMeta(result["oid"]);
987
- return this.sendResp(req, res, { data: resultRecord["authorization"] });
1137
+ const resultRecord = await this.RecordsService.getMeta(result['oid']);
1138
+ return this.sendResp(req, res, { data: resultRecord['authorization'] });
988
1139
  }
989
1140
  catch (err) {
990
1141
  return this.sendResp(req, res, {
991
1142
  errors: [this.asError(err)],
992
- displayErrors: [{ detail: 'Failed updating record meta for adding a viewer role.' }]
1143
+ displayErrors: [{ detail: 'Failed updating record meta for adding a viewer role.' }],
993
1144
  });
994
1145
  }
995
1146
  }
996
1147
  async removeRoleEdit(req, res) {
997
1148
  const brand = BrandingService.getBrand(req.session.branding);
998
- const oid = req.param('oid');
999
- const body = req.body;
1000
- const roles = body["roles"];
1149
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1150
+ const oid = validated.params.oid;
1151
+ const body = validated.body;
1152
+ const roles = body['roles'];
1001
1153
  let record;
1002
1154
  try {
1003
1155
  record = await this.RecordsService.getMeta(oid);
1004
1156
  if (roles != null && roles.length > 0) {
1005
- record["authorization"]["editRoles"] = _.difference(record["authorization"]["editRoles"], roles);
1157
+ record['authorization']['editRoles'] = _.difference(record['authorization']['editRoles'], roles);
1006
1158
  }
1007
1159
  }
1008
1160
  catch (err) {
1009
1161
  return this.sendResp(req, res, {
1010
1162
  errors: [this.asError(err)],
1011
- displayErrors: [{ detail: 'Failed getting record meta for removing an editor role.' }]
1163
+ displayErrors: [{ detail: 'Failed getting record meta for removing an editor role.' }],
1012
1164
  });
1013
1165
  }
1014
1166
  try {
@@ -1016,23 +1168,24 @@ var Controllers;
1016
1168
  if (!result.isSuccessful()) {
1017
1169
  return this.sendResp(req, res, {
1018
1170
  status: 500,
1019
- displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
1171
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
1020
1172
  });
1021
1173
  }
1022
- const resultRecord = await this.RecordsService.getMeta(result["oid"]);
1023
- return this.sendResp(req, res, { data: resultRecord["authorization"] });
1174
+ const resultRecord = await this.RecordsService.getMeta(result['oid']);
1175
+ return this.sendResp(req, res, { data: resultRecord['authorization'] });
1024
1176
  }
1025
1177
  catch (err) {
1026
1178
  return this.sendResp(req, res, {
1027
1179
  errors: [this.asError(err)],
1028
- displayErrors: [{ detail: 'Failed updating record meta for removing an editor role.' }]
1180
+ displayErrors: [{ detail: 'Failed updating record meta for removing an editor role.' }],
1029
1181
  });
1030
1182
  }
1031
1183
  }
1032
1184
  async removeRoleView(req, res) {
1033
1185
  const brand = BrandingService.getBrand(req.session.branding);
1034
- const oid = req.param('oid');
1035
- const body = req.body;
1186
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1187
+ const oid = validated.params.oid;
1188
+ const body = validated.body;
1036
1189
  const users = body['roles'];
1037
1190
  let record;
1038
1191
  try {
@@ -1044,7 +1197,7 @@ var Controllers;
1044
1197
  catch (err) {
1045
1198
  return this.sendResp(req, res, {
1046
1199
  errors: [this.asError(err)],
1047
- displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }]
1200
+ displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }],
1048
1201
  });
1049
1202
  }
1050
1203
  try {
@@ -1052,7 +1205,7 @@ var Controllers;
1052
1205
  if (!result.isSuccessful()) {
1053
1206
  return this.sendResp(req, res, {
1054
1207
  status: 500,
1055
- displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }]
1208
+ displayErrors: [{ detail: `Failed to update record with oid ${oid}.` }],
1056
1209
  });
1057
1210
  }
1058
1211
  const resultRecord = await this.RecordsService.getMeta(result['oid']);
@@ -1061,49 +1214,53 @@ var Controllers;
1061
1214
  catch (err) {
1062
1215
  return this.sendResp(req, res, {
1063
1216
  errors: [this.asError(err)],
1064
- displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }]
1217
+ displayErrors: [{ detail: 'Failed getting record meta for removing a viewer role.' }],
1065
1218
  });
1066
1219
  }
1067
1220
  }
1068
1221
  async harvest(req, res) {
1069
1222
  const brand = BrandingService.getBrand(req.session.branding);
1070
- let updateMode = req.param('updateMode');
1071
- if (_.isEmpty(updateMode)) {
1072
- updateMode = "override";
1073
- }
1074
- const recordType = req.param('recordType');
1223
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1224
+ const recordType = validated.params.recordType;
1225
+ const updateMode = _.isEmpty(validated.query.updateMode)
1226
+ ? 'override'
1227
+ : validated.query.updateMode;
1075
1228
  const recordTypeModel = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, recordType));
1076
1229
  if (recordTypeModel == null) {
1077
- return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: "Record Type provided is not valid" }] });
1230
+ return this.sendResp(req, res, {
1231
+ status: 400,
1232
+ displayErrors: [{ detail: 'Record Type provided is not valid' }],
1233
+ });
1078
1234
  }
1079
1235
  const user = (req.user ?? {});
1080
- const body = req.body;
1236
+ const body = validated.body;
1081
1237
  if (body != null) {
1082
- if (_.isEmpty(body["records"])) {
1083
- return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: "Invalid request body" }] });
1238
+ if (_.isEmpty(body['records'])) {
1239
+ return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request body' }] });
1084
1240
  }
1085
1241
  const recordResponses = [];
1086
1242
  const records = body['records'];
1087
1243
  for (const record of records) {
1088
- const harvestId = record["harvestId"];
1244
+ const harvestId = record['harvestId'];
1089
1245
  if (_.isEmpty(harvestId)) {
1090
- recordResponses.push(new index_1.APIHarvestResponse(harvestId, '', false, "HarvestId was not specified"));
1246
+ recordResponses.push(new index_1.APIHarvestResponse(harvestId, '', false, 'HarvestId was not specified'));
1091
1247
  }
1092
1248
  else {
1249
+ const recordRequest = record['recordRequest'];
1093
1250
  const existingRecord = await this.findExistingHarvestRecord(harvestId, recordType);
1094
- if (existingRecord.length == 0 || updateMode == "create") {
1095
- recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel, record['recordRequest'], harvestId, updateMode, user));
1251
+ if (existingRecord.length == 0 || updateMode == 'create') {
1252
+ recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel, recordRequest, harvestId, updateMode, user));
1096
1253
  }
1097
1254
  else {
1098
1255
  const oid = existingRecord[0].redboxOid;
1099
- if (updateMode != "ignore") {
1100
- const newMetadata = (record['recordRequest']?.metadata ?? record['recordRequest']);
1256
+ if (updateMode != 'ignore') {
1257
+ const newMetadata = (recordRequest?.metadata ?? recordRequest);
1101
1258
  const existingMetadata = (existingRecord[0]?.metadata ?? {});
1102
1259
  if (this.isMetadataEqual(newMetadata, existingMetadata)) {
1103
1260
  recordResponses.push(new index_1.APIHarvestResponse(harvestId, oid, true, `Record ignored as the record already exists. oid: ${oid}`));
1104
1261
  }
1105
1262
  else {
1106
- recordResponses.push(await this.updateHarvestRecord(brand, recordTypeModel, updateMode, record['recordRequest']['metadata'], oid, harvestId, user));
1263
+ recordResponses.push(await this.updateHarvestRecord(brand, recordTypeModel, updateMode, recordRequest?.metadata, oid, harvestId, user));
1107
1264
  }
1108
1265
  }
1109
1266
  else {
@@ -1114,17 +1271,21 @@ var Controllers;
1114
1271
  }
1115
1272
  return this.sendResp(req, res, { data: recordResponses });
1116
1273
  }
1117
- return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: "Invalid request" }] });
1274
+ return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request' }] });
1118
1275
  }
1119
1276
  async legacyHarvest(req, res) {
1120
1277
  const brand = BrandingService.getBrand(req.session.branding);
1121
- const recordType = req.param('recordType');
1278
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1279
+ const recordType = validated.params.recordType;
1122
1280
  const recordTypeModel = await (0, rxjs_1.firstValueFrom)(RecordTypesService.get(brand, recordType));
1123
1281
  if (recordTypeModel == null) {
1124
- return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Record Type provided is not valid' }] });
1282
+ return this.sendResp(req, res, {
1283
+ status: 400,
1284
+ displayErrors: [{ detail: 'Record Type provided is not valid' }],
1285
+ });
1125
1286
  }
1126
1287
  const user = (req.user ?? {});
1127
- const body = req.body;
1288
+ const body = validated.body;
1128
1289
  if (body != null) {
1129
1290
  if (_.isEmpty(body['records'])) {
1130
1291
  return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request body' }] });
@@ -1137,26 +1298,27 @@ var Controllers;
1137
1298
  recordResponses.push(new index_1.APIHarvestResponse(harvestId, '', false, 'HarvestId was not specified'));
1138
1299
  }
1139
1300
  else {
1301
+ const metadata = record['metadata'];
1140
1302
  const existingRecord = await this.findExistingHarvestRecord(harvestId, recordType);
1141
1303
  if (existingRecord.length == 0) {
1142
- recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel, record['metadata']['data'], harvestId, 'update', user));
1304
+ recordResponses.push(await this.createHarvestRecord(brand, recordTypeModel, metadata?.data, harvestId, 'update', user));
1143
1305
  }
1144
1306
  else {
1145
- const merge = req.query['merge'];
1307
+ const merge = validated.query.merge === true;
1146
1308
  let updateMode = 'update';
1147
- if (merge == 'true') {
1309
+ if (merge) {
1148
1310
  updateMode = 'merge';
1149
1311
  }
1150
1312
  const oid = existingRecord[0].redboxOid;
1151
1313
  const oldMetadata = (existingRecord[0].metadata ?? {});
1152
- const newMetadata = record['metadata']['data'];
1314
+ const newMetadata = metadata?.data;
1153
1315
  if (this.isMetadataEqual(newMetadata, oldMetadata)) {
1154
1316
  const response = {
1155
1317
  details: '',
1156
1318
  message: `skip update of harvestId ${harvestId} oid ${oid} metadata sent is equal to metadata in existing record`,
1157
1319
  harvestId: harvestId,
1158
1320
  oid: oid,
1159
- status: true
1321
+ status: true,
1160
1322
  };
1161
1323
  recordResponses.push(response);
1162
1324
  }
@@ -1172,7 +1334,7 @@ var Controllers;
1172
1334
  return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid request' }] });
1173
1335
  }
1174
1336
  async updateHarvestRecord(brand, recordTypeModel, updateMode, body, oid, harvestId, user) {
1175
- const shouldMerge = updateMode == "merge" ? true : false;
1337
+ const shouldMerge = updateMode == 'merge' ? true : false;
1176
1338
  try {
1177
1339
  const record = await this.RecordsService.getMeta(oid);
1178
1340
  if (_.isEmpty(record)) {
@@ -1181,7 +1343,7 @@ var Controllers;
1181
1343
  try {
1182
1344
  if (shouldMerge) {
1183
1345
  // behavior modified from replacing arrays to appending to arrays:
1184
- record["metadata"] = _.mergeWith(record.metadata, body, (objValue, srcValue) => {
1346
+ record['metadata'] = _.mergeWith(record.metadata, body, (objValue, srcValue) => {
1185
1347
  if (_.isArray(objValue)) {
1186
1348
  return objValue.concat(srcValue);
1187
1349
  }
@@ -1189,38 +1351,39 @@ var Controllers;
1189
1351
  });
1190
1352
  }
1191
1353
  else {
1192
- record["metadata"] = body;
1354
+ record['metadata'] = body;
1193
1355
  }
1194
- const sourceMetadata = body["sourceMetadata"];
1356
+ const sourceMetadata = body['sourceMetadata'];
1195
1357
  if (!_.isEmpty(sourceMetadata)) {
1196
1358
  //Force this to be stored as a string
1197
- record['metaMetadata']["sourceMetadata"] = "" + sourceMetadata;
1359
+ record['metaMetadata']['sourceMetadata'] =
1360
+ '' + sourceMetadata;
1198
1361
  }
1199
1362
  await this.RecordsService.updateMeta(brand, oid, record, user);
1200
- let updateMessage = "Record updated successfully";
1363
+ let updateMessage = 'Record updated successfully';
1201
1364
  if (shouldMerge) {
1202
- updateMessage = "Record merged successfully";
1365
+ updateMessage = 'Record merged successfully';
1203
1366
  }
1204
1367
  return new index_1.APIHarvestResponse(harvestId, oid, true, updateMessage);
1205
1368
  }
1206
1369
  catch (error) {
1207
- const result = new index_1.APIHarvestResponse(harvestId, oid, false, "Failed to update meta");
1370
+ const result = new index_1.APIHarvestResponse(harvestId, oid, false, 'Failed to update meta');
1208
1371
  sails.log.error(error, result);
1209
1372
  return result;
1210
1373
  }
1211
1374
  }
1212
1375
  catch (error) {
1213
- const result = new index_1.APIHarvestResponse(harvestId, oid, false, "Failed to retrieve record metadata before update");
1376
+ const result = new index_1.APIHarvestResponse(harvestId, oid, false, 'Failed to retrieve record metadata before update');
1214
1377
  sails.log.error(error, result);
1215
1378
  return result;
1216
1379
  }
1217
1380
  }
1218
1381
  async findExistingHarvestRecord(harvestId, recordType) {
1219
1382
  const results = await global.Record.find({
1220
- 'harvestId': harvestId,
1221
- 'metaMetadata.type': recordType
1383
+ harvestId: harvestId,
1384
+ 'metaMetadata.type': recordType,
1222
1385
  }).meta({
1223
- enableExperimentalDeepTargets: true
1386
+ enableExperimentalDeepTargets: true,
1224
1387
  });
1225
1388
  return results;
1226
1389
  }
@@ -1285,7 +1448,9 @@ var Controllers;
1285
1448
  }
1286
1449
  listDeletedRecords(req, res) {
1287
1450
  const brand = BrandingService.getBrand(req.session.branding);
1288
- const editAccessOnly = req.query.editOnly;
1451
+ const validated = (0, index_1.getValidatedApiRequest)(req);
1452
+ const { query } = validated;
1453
+ const editAccessOnly = query.editOnly;
1289
1454
  let roles = [];
1290
1455
  let user = {};
1291
1456
  if (req.isAuthenticated()) {
@@ -1294,18 +1459,18 @@ var Controllers;
1294
1459
  }
1295
1460
  else {
1296
1461
  // assign default role if needed...
1297
- user = { username: "guest" };
1462
+ user = { username: 'guest' };
1298
1463
  roles = [];
1299
1464
  roles.push(RolesService.getDefUnathenticatedRole(brand));
1300
1465
  }
1301
- const recordType = req.param('recordType');
1302
- const workflowState = req.param('state');
1303
- const start = req.param('start');
1304
- const rows = req.param('rows');
1305
- const packageType = req.param('packageType');
1306
- const sort = req.param('sort');
1307
- const filterFieldString = req.param('filterFields');
1308
- let filterString = req.param('filter');
1466
+ const recordType = query.recordType;
1467
+ const workflowState = query.state;
1468
+ const start = query.start;
1469
+ const rows = query.rows;
1470
+ const packageType = query.packageType;
1471
+ const sort = query.sort;
1472
+ const filterFieldString = query.filterFields;
1473
+ let filterString = query.filter;
1309
1474
  let filterFields = undefined;
1310
1475
  if (!_.isEmpty(filterFieldString)) {
1311
1476
  filterFields = filterString.split(',');
@@ -1320,29 +1485,35 @@ var Controllers;
1320
1485
  return this.getDeletedRecords(workflowState, recordType, start, rows, user, roles, brand, editAccessOnly, packageType, sort, filterFields, filterString)
1321
1486
  .then(response => {
1322
1487
  this.sendResp(req, res, { data: response });
1323
- }).catch(error => {
1324
- return this.sendResp(req, res, { errors: [this.asError(error)], displayErrors: [{ detail: error['error'] }] });
1488
+ })
1489
+ .catch(error => {
1490
+ return this.sendResp(req, res, {
1491
+ errors: [this.asError(error)],
1492
+ displayErrors: [{ detail: error['error'] }],
1493
+ });
1325
1494
  });
1326
1495
  }
1327
1496
  }
1328
1497
  reachedMaxRequestRows(req, res) {
1329
- const descr = "You have reached the maximum of request available; Max rows per request " + sails.config.api.max_requests;
1498
+ const descr = 'You have reached the maximum of request available; Max rows per request ' + sails.config.api.max_requests;
1330
1499
  return this.sendResp(req, res, {
1331
1500
  status: 400,
1332
- displayErrors: [{
1501
+ displayErrors: [
1502
+ {
1333
1503
  detail: descr,
1334
1504
  meta: {
1335
- "code": 400,
1336
- "contactEmail": null,
1337
- "description": descr,
1338
- "homeRef": "/",
1339
- "reasonPhrase": "Bad Request",
1340
- "uri": "http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1"
1341
- }
1342
- }]
1505
+ code: 400,
1506
+ contactEmail: null,
1507
+ description: descr,
1508
+ homeRef: '/',
1509
+ reasonPhrase: 'Bad Request',
1510
+ uri: 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1',
1511
+ },
1512
+ },
1513
+ ],
1343
1514
  });
1344
1515
  }
1345
1516
  }
1346
1517
  Controllers.Record = Record;
1347
1518
  })(Controllers || (exports.Controllers = Controllers = {}));
1348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVycy93ZWJzZXJ2aWNlL1JlY29yZENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlGQUF5RjtBQUN6RixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUQsK0JBQTRDO0FBQzVDLDJDQUE2QjtBQUM3Qix1Q0FhcUI7QUFFckIsK0JBQTJDO0FBRzNDLElBQWlCLFdBQVcsQ0FpMEMzQjtBQWowQ0QsV0FBaUIsV0FBVztJQUMxQjs7OztPQUlHO0lBQ0gsTUFBYSxNQUFPLFNBQVEsbUJBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVTtRQUVyRCxjQUFjLENBQWtCO1FBQ2hDLGFBQWEsQ0FBaUI7UUFDOUIsaUJBQWlCLENBQXFCO1FBQ3RDOztXQUVHO1FBQ2dCLGdCQUFnQixHQUFhO1lBQzlDLE1BQU07WUFDTixRQUFRO1lBQ1IsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQixTQUFTO1lBQ1QsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsYUFBYTtZQUNiLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2Qsc0JBQXNCO1lBQ3RCLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsaUJBQWlCO1lBQ2pCLGFBQWE7WUFD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
1519
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVycy93ZWJzZXJ2aWNlL1JlY29yZENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHlGQUF5RjtBQUN6RixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUQsK0JBQTRDO0FBQzVDLDJDQUE2QjtBQUM3Qix1Q0F5Q3FCO0FBR3JCLCtCQUEyQztBQUUzQyxJQUFpQixXQUFXLENBMnFEM0I7QUEzcURELFdBQWlCLFdBQVc7SUFDMUI7Ozs7T0FJRztJQUNILE1BQWEsTUFBTyxTQUFRLG1CQUFXLENBQUMsSUFBSSxDQUFDLFVBQVU7UUFDckQsY0FBYyxDQUFrQjtRQUNoQyxhQUFhLENBQWlCO1FBQzlCLGlCQUFpQixDQUFxQjtRQUN0Qzs7V0FFRztRQUNnQixnQkFBZ0IsR0FBYTtZQUM5QyxNQUFNO1lBQ04sUUFBUTtZQUNSLFlBQVk7WUFDWixrQkFBa0I7WUFDbEIsU0FBUztZQUNULGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixvQkFBb0I7WUFDcEIsY0FBYztZQUNkLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2Ysb0JBQW9CO1lBQ3BCLGlCQUFpQjtZQUNqQixhQUFhO1lB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