@researchdatabox/redbox-core 0.0.1-beta.9909 → 5.0.0-RC1

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 (377) hide show
  1. package/dist/CoreController.d.ts +12 -0
  2. package/dist/CoreController.d.ts.map +1 -1
  3. package/dist/CoreController.js +91 -52
  4. package/dist/CoreService.d.ts +8 -1
  5. package/dist/CoreService.d.ts.map +1 -1
  6. package/dist/CoreService.js +8 -1
  7. package/dist/RecordsService.d.ts +2 -0
  8. package/dist/RecordsService.d.ts.map +1 -1
  9. package/dist/SearchService.d.ts +1 -1
  10. package/dist/SearchService.d.ts.map +1 -1
  11. package/dist/StorageService.d.ts +3 -1
  12. package/dist/StorageService.d.ts.map +1 -1
  13. package/dist/api-routes/groups/branding.d.ts +1 -0
  14. package/dist/api-routes/groups/branding.d.ts.map +1 -1
  15. package/dist/api-routes/groups/branding.js +19 -2
  16. package/dist/api-routes/groups/export.js +2 -2
  17. package/dist/api-routes/groups/figshare-crosswalks.d.ts +11 -0
  18. package/dist/api-routes/groups/figshare-crosswalks.d.ts.map +1 -0
  19. package/dist/api-routes/groups/figshare-crosswalks.js +171 -0
  20. package/dist/api-routes/groups/figshare-vocabulary.d.ts +12 -0
  21. package/dist/api-routes/groups/figshare-vocabulary.d.ts.map +1 -0
  22. package/dist/api-routes/groups/figshare-vocabulary.js +248 -0
  23. package/dist/api-routes/groups/search.js +4 -4
  24. package/dist/api-routes/groups/users.js +3 -3
  25. package/dist/api-routes/helpers.d.ts +4 -4
  26. package/dist/api-routes/helpers.d.ts.map +1 -1
  27. package/dist/api-routes/helpers.js +3 -4
  28. package/dist/api-routes/index.d.ts +2 -0
  29. package/dist/api-routes/index.d.ts.map +1 -1
  30. package/dist/api-routes/index.js +3 -1
  31. package/dist/api-routes/openapi.js +1 -1
  32. package/dist/api-routes/request-extraction.d.ts +2 -2
  33. package/dist/api-routes/request-extraction.d.ts.map +1 -1
  34. package/dist/api-routes/request-extraction.js +1 -1
  35. package/dist/api-routes/route-registry.d.ts.map +1 -1
  36. package/dist/api-routes/route-registry.js +5 -1
  37. package/dist/api-routes/schemas/common.d.ts +19 -19
  38. package/dist/api-routes/schemas/common.d.ts.map +1 -1
  39. package/dist/api-routes/schemas/common.js +3 -2
  40. package/dist/api-routes/schemas/responses.d.ts +352 -7032
  41. package/dist/api-routes/schemas/responses.d.ts.map +1 -1
  42. package/dist/api-routes/schemas/responses.js +2 -2
  43. package/dist/api-routes/types.d.ts +2 -2
  44. package/dist/api-routes/types.d.ts.map +1 -1
  45. package/dist/api-routes/validation.js +1 -1
  46. package/dist/bootstrap.d.ts.map +1 -1
  47. package/dist/bootstrap.js +5 -1
  48. package/dist/config/agendaQueue.config.d.ts +11 -5
  49. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  50. package/dist/config/agendaQueue.config.js +27 -19
  51. package/dist/config/auth.config.d.ts.map +1 -1
  52. package/dist/config/auth.config.js +4 -1
  53. package/dist/config/brandingConfigurationDefaults.config.d.ts +1 -1
  54. package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
  55. package/dist/config/brandingConfigurationDefaults.config.js +22 -227
  56. package/dist/config/dashboardtype.config.d.ts +7 -0
  57. package/dist/config/dashboardtype.config.d.ts.map +1 -1
  58. package/dist/config/dashboardtype.config.js +9 -89
  59. package/dist/config/dashboardview.config.d.ts +7 -0
  60. package/dist/config/dashboardview.config.d.ts.map +1 -1
  61. package/dist/config/dashboardview.config.js +9 -134
  62. package/dist/config/emailnotification.config.d.ts.map +1 -1
  63. package/dist/config/emailnotification.config.js +2 -1
  64. package/dist/config/http.config.d.ts +2 -0
  65. package/dist/config/http.config.d.ts.map +1 -1
  66. package/dist/config/http.config.js +47 -1
  67. package/dist/config/jsonld.config.d.ts.map +1 -1
  68. package/dist/config/jsonld.config.js +2 -21
  69. package/dist/config/record.config.d.ts.map +1 -1
  70. package/dist/config/record.config.js +2 -9
  71. package/dist/config/recordtype.config.d.ts +8 -0
  72. package/dist/config/recordtype.config.d.ts.map +1 -1
  73. package/dist/config/recordtype.config.js +10 -660
  74. package/dist/config/reusableContributorFormDefinitions.config.d.ts +1 -1
  75. package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -1
  76. package/dist/config/reusableContributorFormDefinitions.config.js +307 -202
  77. package/dist/config/reusableViewFormDefinitions.config.d.ts.map +1 -1
  78. package/dist/config/reusableViewFormDefinitions.config.js +15 -4
  79. package/dist/config/routes.config.d.ts.map +1 -1
  80. package/dist/config/routes.config.js +13 -3
  81. package/dist/config/solr.config.d.ts +1 -0
  82. package/dist/config/solr.config.d.ts.map +1 -1
  83. package/dist/config/solr.config.js +3 -2
  84. package/dist/config/static_assets.config.d.ts +2 -0
  85. package/dist/config/static_assets.config.d.ts.map +1 -1
  86. package/dist/config/static_assets.config.js +4 -2
  87. package/dist/config/storage.config.d.ts.map +1 -1
  88. package/dist/config/storage.config.js +7 -1
  89. package/dist/config/views.config.d.ts.map +1 -1
  90. package/dist/config/views.config.js +2 -6
  91. package/dist/config/vocab.config.d.ts +4 -0
  92. package/dist/config/vocab.config.d.ts.map +1 -1
  93. package/dist/config/vocab.config.js +1 -1
  94. package/dist/config/workflow.config.d.ts +7 -0
  95. package/dist/config/workflow.config.d.ts.map +1 -1
  96. package/dist/config/workflow.config.js +9 -194
  97. package/dist/config/workspacetype.config.d.ts +7 -0
  98. package/dist/config/workspacetype.config.d.ts.map +1 -1
  99. package/dist/config/workspacetype.config.js +9 -10
  100. package/dist/configmodels/ConfigModels.d.ts +1 -1
  101. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  102. package/dist/configmodels/ConfigModels.js +9 -1
  103. package/dist/configmodels/DoiPublishing.d.ts +1 -1
  104. package/dist/configmodels/DoiPublishing.d.ts.map +1 -1
  105. package/dist/configmodels/FigsharePublishing.d.ts +746 -217
  106. package/dist/configmodels/FigsharePublishing.d.ts.map +1 -1
  107. package/dist/configmodels/FigsharePublishing.js +181 -190
  108. package/dist/configmodels/IntegrationNotificationConfig.d.ts +133 -0
  109. package/dist/configmodels/IntegrationNotificationConfig.d.ts.map +1 -0
  110. package/dist/configmodels/IntegrationNotificationConfig.js +64 -0
  111. package/dist/constants/export.d.ts +2 -0
  112. package/dist/constants/export.d.ts.map +1 -0
  113. package/dist/constants/export.js +8 -0
  114. package/dist/controllers/AdminController.d.ts.map +1 -1
  115. package/dist/controllers/AdminController.js +1 -1
  116. package/dist/controllers/AsynchController.d.ts +4 -1
  117. package/dist/controllers/AsynchController.d.ts.map +1 -1
  118. package/dist/controllers/AsynchController.js +118 -9
  119. package/dist/controllers/BrandingAppController.d.ts +2 -0
  120. package/dist/controllers/BrandingAppController.d.ts.map +1 -1
  121. package/dist/controllers/BrandingAppController.js +40 -2
  122. package/dist/controllers/BrandingController.d.ts +8 -0
  123. package/dist/controllers/BrandingController.d.ts.map +1 -1
  124. package/dist/controllers/BrandingController.js +45 -1
  125. package/dist/controllers/ExportController.d.ts.map +1 -1
  126. package/dist/controllers/ExportController.js +6 -10
  127. package/dist/controllers/RecordAuditController.d.ts +2 -0
  128. package/dist/controllers/RecordAuditController.d.ts.map +1 -1
  129. package/dist/controllers/RecordAuditController.js +55 -1
  130. package/dist/controllers/RecordController.d.ts +5 -1
  131. package/dist/controllers/RecordController.d.ts.map +1 -1
  132. package/dist/controllers/RecordController.js +51 -21
  133. package/dist/controllers/UserController.d.ts.map +1 -1
  134. package/dist/controllers/UserController.js +3 -2
  135. package/dist/controllers/VocabularyController.js +4 -4
  136. package/dist/controllers/index.d.ts.map +1 -1
  137. package/dist/controllers/index.js +7 -1
  138. package/dist/controllers/webservice/BrandingController.d.ts +1 -0
  139. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  140. package/dist/controllers/webservice/BrandingController.js +69 -10
  141. package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
  142. package/dist/controllers/webservice/ExportController.js +6 -10
  143. package/dist/controllers/webservice/FigshareCrosswalkController.d.ts +20 -0
  144. package/dist/controllers/webservice/FigshareCrosswalkController.d.ts.map +1 -0
  145. package/dist/controllers/webservice/FigshareCrosswalkController.js +184 -0
  146. package/dist/controllers/webservice/FigshareVocabularyController.d.ts +21 -0
  147. package/dist/controllers/webservice/FigshareVocabularyController.d.ts.map +1 -0
  148. package/dist/controllers/webservice/FigshareVocabularyController.js +223 -0
  149. package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -1
  150. package/dist/controllers/webservice/IntegrationAuditController.js +1 -1
  151. package/dist/controllers/webservice/RecordController.d.ts +6 -1
  152. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  153. package/dist/controllers/webservice/RecordController.js +64 -13
  154. package/dist/controllers/webservice/UserManagementController.d.ts +5 -3
  155. package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
  156. package/dist/controllers/webservice/UserManagementController.js +140 -9
  157. package/dist/controllers/webservice/figshare-vocabulary-errors.d.ts +14 -0
  158. package/dist/controllers/webservice/figshare-vocabulary-errors.d.ts.map +1 -0
  159. package/dist/controllers/webservice/figshare-vocabulary-errors.js +39 -0
  160. package/dist/form-config/index.d.ts +7 -0
  161. package/dist/form-config/index.d.ts.map +1 -1
  162. package/dist/form-config/index.js +8 -5
  163. package/dist/hooks/defineRedboxHook.d.ts +11 -2
  164. package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
  165. package/dist/hooks/defineRedboxHook.js +36 -7
  166. package/dist/hooks/hookDiscovery.d.ts +20 -0
  167. package/dist/hooks/hookDiscovery.d.ts.map +1 -0
  168. package/dist/hooks/hookDiscovery.js +186 -0
  169. package/dist/hooks/hookResources.d.ts +23 -0
  170. package/dist/hooks/hookResources.d.ts.map +1 -0
  171. package/dist/hooks/hookResources.js +136 -0
  172. package/dist/hooks/index.d.ts +4 -0
  173. package/dist/hooks/index.d.ts.map +1 -1
  174. package/dist/hooks/index.js +14 -2
  175. package/dist/index.d.ts +6 -1
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +15 -2
  178. package/dist/loader/index.d.ts +2 -0
  179. package/dist/loader/index.d.ts.map +1 -1
  180. package/dist/loader/index.js +82 -64
  181. package/dist/model/storage/BrandingModel.d.ts +2 -0
  182. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  183. package/dist/model/storage/BrandingModel.js +3 -1
  184. package/dist/model/storage/IntegrationAuditModel.d.ts +2 -0
  185. package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
  186. package/dist/model/storage/IntegrationAuditModel.js +3 -1
  187. package/dist/policies/i18nLanguages.d.ts.map +1 -1
  188. package/dist/policies/i18nLanguages.js +1 -1
  189. package/dist/policies/menuResolver.d.ts.map +1 -1
  190. package/dist/policies/menuResolver.js +1 -1
  191. package/dist/policies/setLang.d.ts.map +1 -1
  192. package/dist/policies/setLang.js +1 -1
  193. package/dist/responses/badRequest.d.ts.map +1 -1
  194. package/dist/responses/badRequest.js +3 -2
  195. package/dist/responses/created.d.ts.map +1 -1
  196. package/dist/responses/created.js +3 -2
  197. package/dist/responses/forbidden.d.ts.map +1 -1
  198. package/dist/responses/forbidden.js +3 -2
  199. package/dist/responses/ok.d.ts.map +1 -1
  200. package/dist/responses/ok.js +3 -2
  201. package/dist/responses/serverError.d.ts.map +1 -1
  202. package/dist/responses/serverError.js +3 -2
  203. package/dist/responses/siteTitle.d.ts.map +1 -1
  204. package/dist/responses/siteTitle.js +1 -1
  205. package/dist/services/AgendaQueueService.d.ts +1 -0
  206. package/dist/services/AgendaQueueService.d.ts.map +1 -1
  207. package/dist/services/AgendaQueueService.js +24 -9
  208. package/dist/services/BrandingLogoService.d.ts +25 -1
  209. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  210. package/dist/services/BrandingLogoService.js +56 -5
  211. package/dist/services/BrandingThemeTokens.d.ts.map +1 -1
  212. package/dist/services/BrandingThemeTokens.js +2 -1
  213. package/dist/services/DoiService.js +5 -5
  214. package/dist/services/EmailService.d.ts +12 -4
  215. package/dist/services/EmailService.d.ts.map +1 -1
  216. package/dist/services/EmailService.js +28 -19
  217. package/dist/services/FigshareService.d.ts +12 -7
  218. package/dist/services/FigshareService.d.ts.map +1 -1
  219. package/dist/services/FigshareService.js +258 -104
  220. package/dist/services/FigshareVocabularyService.d.ts +442 -0
  221. package/dist/services/FigshareVocabularyService.d.ts.map +1 -0
  222. package/dist/services/FigshareVocabularyService.js +1802 -0
  223. package/dist/services/FormVocabularyService.d.ts.map +1 -1
  224. package/dist/services/FormVocabularyService.js +28 -7
  225. package/dist/services/HarvestRunService.d.ts.map +1 -1
  226. package/dist/services/HarvestRunService.js +1 -1
  227. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  228. package/dist/services/I18nEntriesService.js +26 -4
  229. package/dist/services/IntegrationAuditService.d.ts +58 -0
  230. package/dist/services/IntegrationAuditService.d.ts.map +1 -1
  231. package/dist/services/IntegrationAuditService.js +292 -15
  232. package/dist/services/IntegrationNotificationService.d.ts +55 -0
  233. package/dist/services/IntegrationNotificationService.d.ts.map +1 -0
  234. package/dist/services/IntegrationNotificationService.js +271 -0
  235. package/dist/services/NamedQueryService.d.ts.map +1 -1
  236. package/dist/services/NamedQueryService.js +3 -16
  237. package/dist/services/OniService.d.ts.map +1 -1
  238. package/dist/services/OniService.js +3 -5
  239. package/dist/services/RDMPService.d.ts +2 -0
  240. package/dist/services/RDMPService.d.ts.map +1 -1
  241. package/dist/services/RDMPService.js +49 -33
  242. package/dist/services/RecordsService.d.ts +9 -2
  243. package/dist/services/RecordsService.d.ts.map +1 -1
  244. package/dist/services/RecordsService.js +66 -46
  245. package/dist/services/ReportsService.d.ts +0 -5
  246. package/dist/services/ReportsService.d.ts.map +1 -1
  247. package/dist/services/ReportsService.js +22 -31
  248. package/dist/services/SolrSearchService.d.ts +10 -2
  249. package/dist/services/SolrSearchService.d.ts.map +1 -1
  250. package/dist/services/SolrSearchService.js +110 -52
  251. package/dist/services/StandardDatastreamService.d.ts +7 -0
  252. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  253. package/dist/services/StandardDatastreamService.js +127 -27
  254. package/dist/services/TemplateService.d.ts +1 -15
  255. package/dist/services/TemplateService.d.ts.map +1 -1
  256. package/dist/services/TemplateService.js +7 -47
  257. package/dist/services/UsersService.d.ts.map +1 -1
  258. package/dist/services/UsersService.js +19 -16
  259. package/dist/services/ViewUtilsService.d.ts +5 -1
  260. package/dist/services/ViewUtilsService.d.ts.map +1 -1
  261. package/dist/services/ViewUtilsService.js +38 -46
  262. package/dist/services/VocabularyService.d.ts +11 -2
  263. package/dist/services/VocabularyService.d.ts.map +1 -1
  264. package/dist/services/VocabularyService.js +46 -20
  265. package/dist/services/doi-v2/audit.d.ts.map +1 -1
  266. package/dist/services/doi-v2/audit.js +1 -1
  267. package/dist/services/doi-v2/bindings.d.ts.map +1 -1
  268. package/dist/services/doi-v2/bindings.js +2 -11
  269. package/dist/services/doi-v2/payload.d.ts.map +1 -1
  270. package/dist/services/doi-v2/payload.js +32 -18
  271. package/dist/services/figshare-v2/assets.d.ts +2 -1
  272. package/dist/services/figshare-v2/assets.d.ts.map +1 -1
  273. package/dist/services/figshare-v2/assets.js +144 -89
  274. package/dist/services/figshare-v2/audit.d.ts +7 -0
  275. package/dist/services/figshare-v2/audit.d.ts.map +1 -0
  276. package/dist/services/figshare-v2/audit.js +30 -0
  277. package/dist/services/figshare-v2/bindings.d.ts +28 -3
  278. package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
  279. package/dist/services/figshare-v2/bindings.js +76 -17
  280. package/dist/services/figshare-v2/categories.d.ts +142 -0
  281. package/dist/services/figshare-v2/categories.d.ts.map +1 -0
  282. package/dist/services/figshare-v2/categories.js +408 -0
  283. package/dist/services/figshare-v2/config.d.ts +10 -0
  284. package/dist/services/figshare-v2/config.d.ts.map +1 -1
  285. package/dist/services/figshare-v2/config.js +64 -2
  286. package/dist/services/figshare-v2/context.d.ts +18 -1
  287. package/dist/services/figshare-v2/context.d.ts.map +1 -1
  288. package/dist/services/figshare-v2/context.js +35 -2
  289. package/dist/services/figshare-v2/embargo.d.ts.map +1 -1
  290. package/dist/services/figshare-v2/embargo.js +6 -4
  291. package/dist/services/figshare-v2/http.d.ts +20 -1
  292. package/dist/services/figshare-v2/http.d.ts.map +1 -1
  293. package/dist/services/figshare-v2/http.js +85 -9
  294. package/dist/services/figshare-v2/metadata.d.ts.map +1 -1
  295. package/dist/services/figshare-v2/metadata.js +150 -35
  296. package/dist/services/figshare-v2/observability.d.ts +1 -2
  297. package/dist/services/figshare-v2/observability.d.ts.map +1 -1
  298. package/dist/services/figshare-v2/observability.js +7 -45
  299. package/dist/services/figshare-v2/runtime.d.ts +5 -2
  300. package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
  301. package/dist/services/figshare-v2/runtime.js +59 -37
  302. package/dist/services/figshare-v2/types.d.ts +18 -0
  303. package/dist/services/figshare-v2/types.d.ts.map +1 -1
  304. package/dist/services/figshare-v2/types.js +1 -1
  305. package/dist/services/figshare-v2/vocabulary-errors.d.ts +39 -0
  306. package/dist/services/figshare-v2/vocabulary-errors.d.ts.map +1 -0
  307. package/dist/services/figshare-v2/vocabulary-errors.js +68 -0
  308. package/dist/services/index.d.ts +6 -0
  309. package/dist/services/index.d.ts.map +1 -1
  310. package/dist/services/index.js +13 -2
  311. package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -1
  312. package/dist/storage/TusStorageManagerDataStore.js +14 -1
  313. package/dist/transformers/ExportJSONTransformer.d.ts +1 -1
  314. package/dist/transformers/ExportJSONTransformer.d.ts.map +1 -1
  315. package/dist/transformers/ExportJSONTransformer.js +3 -3
  316. package/dist/utilities/ContextVariableUtils.d.ts +3 -1
  317. package/dist/utilities/ContextVariableUtils.d.ts.map +1 -1
  318. package/dist/utilities/ContextVariableUtils.js +25 -7
  319. package/dist/utilities/PromiseUtils.d.ts +9 -0
  320. package/dist/utilities/PromiseUtils.d.ts.map +1 -0
  321. package/dist/utilities/PromiseUtils.js +27 -0
  322. package/dist/utilities/RedactionUtils.d.ts +3 -0
  323. package/dist/utilities/RedactionUtils.d.ts.map +1 -0
  324. package/dist/utilities/RedactionUtils.js +55 -0
  325. package/dist/visitor/client.visitor.d.ts +7 -0
  326. package/dist/visitor/client.visitor.d.ts.map +1 -1
  327. package/dist/visitor/client.visitor.js +135 -30
  328. package/dist/visitor/construct.visitor.d.ts +6 -0
  329. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  330. package/dist/visitor/construct.visitor.js +153 -108
  331. package/dist/visitor/data-value.visitor.d.ts +3 -0
  332. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  333. package/dist/visitor/data-value.visitor.js +6 -1
  334. package/dist/visitor/json-type-def.visitor.d.ts +4 -0
  335. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  336. package/dist/visitor/json-type-def.visitor.js +25 -4
  337. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +9 -3
  338. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  339. package/dist/visitor/migrate-config-v4-v5.visitor.js +211 -148
  340. package/dist/visitor/template.visitor.d.ts +3 -0
  341. package/dist/visitor/template.visitor.d.ts.map +1 -1
  342. package/dist/visitor/template.visitor.js +6 -1
  343. package/dist/visitor/validator.visitor.d.ts +3 -1
  344. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  345. package/dist/visitor/validator.visitor.js +8 -2
  346. package/dist/visitor/visitor-helpers.js +2 -2
  347. package/dist/waterline-models/BrandingConfig.d.ts +2 -0
  348. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  349. package/dist/waterline-models/BrandingConfig.js +6 -1
  350. package/dist/waterline-models/FigshareVocabularyCategory.d.ts +38 -0
  351. package/dist/waterline-models/FigshareVocabularyCategory.d.ts.map +1 -0
  352. package/dist/waterline-models/FigshareVocabularyCategory.js +157 -0
  353. package/dist/waterline-models/FigshareVocabularyCrosswalk.d.ts +37 -0
  354. package/dist/waterline-models/FigshareVocabularyCrosswalk.d.ts.map +1 -0
  355. package/dist/waterline-models/FigshareVocabularyCrosswalk.js +153 -0
  356. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.d.ts +37 -0
  357. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.d.ts.map +1 -0
  358. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.js +138 -0
  359. package/dist/waterline-models/FigshareVocabularySource.d.ts +45 -0
  360. package/dist/waterline-models/FigshareVocabularySource.d.ts.map +1 -0
  361. package/dist/waterline-models/FigshareVocabularySource.js +149 -0
  362. package/dist/waterline-models/FigshareVocabularySyncRun.d.ts +70 -0
  363. package/dist/waterline-models/FigshareVocabularySyncRun.d.ts.map +1 -0
  364. package/dist/waterline-models/FigshareVocabularySyncRun.js +237 -0
  365. package/dist/waterline-models/Vocabulary.d.ts +3 -1
  366. package/dist/waterline-models/Vocabulary.d.ts.map +1 -1
  367. package/dist/waterline-models/Vocabulary.js +9 -3
  368. package/dist/waterline-models/index.d.ts +10 -0
  369. package/dist/waterline-models/index.d.ts.map +1 -1
  370. package/dist/waterline-models/index.js +16 -1
  371. package/package.json +28 -31
  372. package/dist/form-config/dataRecord-1.0-draft.d.ts +0 -4
  373. package/dist/form-config/dataRecord-1.0-draft.d.ts.map +0 -1
  374. package/dist/form-config/dataRecord-1.0-draft.js +0 -1042
  375. package/dist/form-config/default-1.0-draft.d.ts +0 -4
  376. package/dist/form-config/default-1.0-draft.d.ts.map +0 -1
  377. package/dist/form-config/default-1.0-draft.js +0 -1156
@@ -10,7 +10,8 @@ const assets_1 = require("./figshare-v2/assets");
10
10
  const embargo_1 = require("./figshare-v2/embargo");
11
11
  const publish_1 = require("./figshare-v2/publish");
12
12
  const writeback_1 = require("./figshare-v2/writeback");
13
- const metadata_1 = require("./figshare-v2/metadata");
13
+ const audit_1 = require("./figshare-v2/audit");
14
+ const runtime_1 = require("./figshare-v2/runtime");
14
15
  const queue_1 = require("./figshare-v2/queue");
15
16
  const workflow_1 = require("./figshare-v2/workflow");
16
17
  const http_1 = require("./figshare-v2/http");
@@ -38,19 +39,94 @@ var Services;
38
39
  'syncRecordWithFigshare',
39
40
  'init',
40
41
  ];
41
- startIntegrationAudit(record, action, details) {
42
- const oid = String(record.redboxOid ?? record.id ?? '');
43
- return IntegrationAuditService.startAudit(oid, action, {
44
- brandId: record.metaMetadata?.brandId,
45
- triggeredBy: details.triggerSource,
46
- requestSummary: details,
42
+ _msgPrefix;
43
+ msgPrefix() {
44
+ if (!this._msgPrefix) {
45
+ this._msgPrefix = TranslationService.t('figshare-api-error');
46
+ }
47
+ return this._msgPrefix;
48
+ }
49
+ hasConfiguredTriggerCondition(options) {
50
+ return typeof options?.triggerCondition === 'string' && options.triggerCondition.length > 0;
51
+ }
52
+ shouldRunFigshareLifecycleSync(oid, record, options, user) {
53
+ if (!this.hasConfiguredTriggerCondition(options) && !Boolean(options?.forceRun)) {
54
+ return true;
55
+ }
56
+ return this.metTriggerCondition(oid, record, options, user) === 'true';
57
+ }
58
+ summarizeError(error) {
59
+ if (error instanceof RBValidationError_1.RBValidationError) {
60
+ return {
61
+ responseSummary: {
62
+ displayErrors: error.displayErrors
63
+ }
64
+ };
65
+ }
66
+ const httpError = error;
67
+ const statusCode = typeof httpError?.statusCode === 'number' ? httpError.statusCode : undefined;
68
+ const responseBody = httpError?.responseBody;
69
+ const errorMessage = error instanceof Error ? error.message : String(error);
70
+ return {
71
+ statusCode,
72
+ responseSummary: responseBody != null && typeof responseBody === 'object'
73
+ ? responseBody
74
+ : {
75
+ errorType: error instanceof Error ? error.name : typeof error,
76
+ message: errorMessage,
77
+ ...(statusCode != null ? { statusCode } : {}),
78
+ // Plain-text API responses (e.g. "Unauthorized") still carry diagnostic value;
79
+ // keep them in the audit summary (same field name as doi-v2's toResponseSummary).
80
+ ...(responseBody != null ? { rawResponseBody: String(responseBody) } : {})
81
+ }
82
+ };
83
+ }
84
+ wrapHttpError(error, message, fallbackStatus) {
85
+ const statusCode = error?.statusCode ?? fallbackStatus;
86
+ if (error instanceof RBValidationError_1.RBValidationError) {
87
+ throw error;
88
+ }
89
+ const figshareMessage = this.getFigshareResponseMessage(error);
90
+ throw new RBValidationError_1.RBValidationError({
91
+ message: `${this.msgPrefix()} ${message}`,
92
+ options: { cause: error },
93
+ displayErrors: this.figshareResponseToRBValidationError(statusCode ?? 500, undefined, figshareMessage).displayErrors
47
94
  });
48
95
  }
49
- completeIntegrationAudit(ctx, details) {
50
- IntegrationAuditService.completeAudit(ctx, details);
96
+ getFigshareResponseMessage(error) {
97
+ const responseBody = error?.responseBody;
98
+ if (responseBody == null || typeof responseBody !== 'object') {
99
+ return undefined;
100
+ }
101
+ const message = responseBody.message;
102
+ return typeof message === 'string' && message.trim() !== '' ? message.trim() : undefined;
51
103
  }
52
- failIntegrationAudit(ctx, error, details) {
53
- IntegrationAuditService.failAudit(ctx, error, details);
104
+ figshareResponseToRBValidationError(statusCode, messagePrefix, figshareMessage) {
105
+ let message;
106
+ switch (statusCode) {
107
+ case 403:
108
+ message = 'not-authorised';
109
+ break;
110
+ case 404:
111
+ message = 'not-found';
112
+ break;
113
+ case 422:
114
+ message = 'invalid-format';
115
+ break;
116
+ case 500:
117
+ message = 'server-error';
118
+ break;
119
+ default:
120
+ message = 'unknown-error';
121
+ break;
122
+ }
123
+ const translated = figshareMessage != null && statusCode >= 400 && statusCode < 500
124
+ ? figshareMessage
125
+ : TranslationService.t(message);
126
+ return new RBValidationError_1.RBValidationError({
127
+ message: `${this.msgPrefix()} ${messagePrefix ?? translated}`,
128
+ displayErrors: [{ code: message, title: this.msgPrefix(), detail: translated }]
129
+ });
54
130
  }
55
131
  assertConfig(record, operation) {
56
132
  const config = this.getConfig(record);
@@ -72,7 +148,7 @@ var Services;
72
148
  (0, bindings_1.validateHandlebarsTemplate)(template);
73
149
  }
74
150
  async buildMetadataPayload(config, record) {
75
- return (0, metadata_1.buildMetadataPayload)(config, record, this.makeClient(config, record, undefined, 'buildMetadataPayload'));
151
+ return (0, runtime_1.runBuildMetadataPayload)(config, record);
76
152
  }
77
153
  makeClient(config, record, jobId, triggerSource = 'manual') {
78
154
  const runContext = (0, context_1.createRunContext)(record, config, jobId, triggerSource);
@@ -92,23 +168,16 @@ var Services;
92
168
  const config = this.assertConfig(record, 'syncMetadata');
93
169
  const rm = record;
94
170
  const publicationPlan = plan ?? this.preparePublication(rm);
95
- const articleId = publicationPlan.articleId;
96
- if (articleId) {
97
- const currentArticle = await this.makeClient(config, rm, publicationPlan.syncState.correlationId, 'syncMetadata').getArticle(articleId);
98
- if (this.isCurationLocked(rm, currentArticle)) {
99
- return currentArticle;
100
- }
101
- await this.ensureNoFileUploadInProgress(config, rm, articleId);
102
- }
103
- const client = this.makeClient(config, rm, publicationPlan.syncState.correlationId, 'syncMetadata');
104
- return (0, metadata_1.syncMetadataPhase)(client, config, rm, publicationPlan);
171
+ // The runtime program handles the curation lock and upload-in-progress checks.
172
+ const runContext = (0, context_1.createRunContext)(rm, config, publicationPlan.syncState.correlationId, 'syncMetadata');
173
+ return (0, runtime_1.runSyncMetadataProgram)(config, runContext, rm, publicationPlan);
105
174
  }
106
175
  async syncAssets(record, article) {
107
176
  const config = this.assertConfig(record, 'syncAssets');
108
177
  const rm = record;
109
178
  const syncState = this.getSyncState(config, rm);
110
179
  const client = this.makeClient(config, rm, syncState.correlationId, 'syncAssets');
111
- return (0, assets_1.syncAssetsPhase)(client, config, rm, article, syncState);
180
+ return (0, assets_1.syncAssetsPhase)(client, config, rm, article, syncState, this.logger);
112
181
  }
113
182
  async syncEmbargo(record, articleId) {
114
183
  const config = this.assertConfig(record, 'syncEmbargo');
@@ -129,46 +198,22 @@ var Services;
129
198
  }
130
199
  return (0, writeback_1.writeBackPhase)(config, record, article, publishResult, assetSyncResult);
131
200
  }
201
+ // Thin delegates to the figshare-v2 runtime helpers (single implementation lives
202
+ // there, shared with the Effect programs). Kept as instance methods so callers and
203
+ // tests retain a stub seam on the service.
132
204
  async getArticleFiles(client, articleId) {
133
- const files = [];
134
- let page = 1;
135
- const pageSize = 20;
136
- while (true) {
137
- const pageResults = await client.listArticleFiles(articleId, page, pageSize);
138
- if (!Array.isArray(pageResults) || pageResults.length === 0) {
139
- break;
140
- }
141
- files.push(...pageResults);
142
- if (pageResults.length < pageSize) {
143
- break;
144
- }
145
- page++;
146
- }
147
- return files;
205
+ return (0, runtime_1.listArticleFiles)(client, articleId);
148
206
  }
149
207
  isCurationLocked(record, article) {
150
208
  const config = this.getConfig(record);
151
- const statusField = config?.article.curationLock?.statusField ?? '';
152
- const targetValue = config?.article.curationLock?.targetValue ?? 'public';
153
- const updatesDisabled = config?.article.curationLock?.enabled === true;
154
- if (!updatesDisabled || statusField === '') {
209
+ if (config == null) {
155
210
  return false;
156
211
  }
157
- return String(article[statusField] ?? '') === targetValue;
212
+ return (0, runtime_1.isCurationLocked)(config, article);
158
213
  }
159
214
  async ensureNoFileUploadInProgress(config, record, articleId) {
160
215
  const client = this.makeClient(config, record, undefined, 'ensureNoFileUploadInProgress');
161
- const files = await this.getArticleFiles(client, articleId);
162
- const inProgress = files.some((entry) => String(entry.status ?? '').toLowerCase() === 'created');
163
- if (inProgress) {
164
- throw new RBValidationError_1.RBValidationError({
165
- message: `Figshare file uploads are still in progress for article '${articleId}'`,
166
- displayErrors: [{
167
- title: 'Figshare file uploads are still in progress',
168
- detail: `Figshare file uploads are still in progress for article '${articleId}'`
169
- }]
170
- });
171
- }
216
+ await (0, runtime_1.ensureNoFileUploadInProgress)(client, articleId);
172
217
  }
173
218
  async cleanupUploadedFiles(record, articleId) {
174
219
  const config = this.getConfig(record);
@@ -253,22 +298,20 @@ var Services;
253
298
  }
254
299
  const msgPartial = `record oid '${oid}' with figshare article id '${articleId}' to step '${targetStep}'`;
255
300
  if (!(await this.isArticleReadyForWorkflowTransition(config, record, articleId, figshareTargetFieldKey, figshareTargetFieldValue))) {
256
- sails.log.warn(`FigService - cannot transition ${msgPartial} because the linked article is not in the required state`);
257
- return;
301
+ throw new Error(`Cannot transition ${msgPartial} because the linked article is not in the required state`);
258
302
  }
259
303
  const currentRec = await RecordsService.getMeta(oid);
260
- const brand = BrandingService.getBrand(currentRec.metaMetadata?.brandId ?? 'default');
304
+ const brandId = currentRec.metaMetadata?.brandId;
305
+ const brand = (brandId ? (BrandingService.getBrandById(brandId) ?? BrandingService.getBrand(brandId)) : null) ?? BrandingService.getDefault();
261
306
  const userRoles = user.roles ?? [];
262
307
  const hasEditAccess = await RecordsService.hasEditAccess(brand, user, userRoles, currentRec);
263
308
  if (!hasEditAccess) {
264
- sails.log.warn(`FigService - cannot transition ${msgPartial} because user '${user.username}' does not have edit permission`);
265
- return;
309
+ throw new Error(`Cannot transition ${msgPartial} because user '${user.username}' does not have edit permission`);
266
310
  }
267
311
  const recordTypeName = currentRec.metaMetadata?.type ?? '';
268
312
  const recordType = await RecordTypesService.get(brand, recordTypeName).toPromise();
269
313
  if (!recordType) {
270
- sails.log.warn(`FigService - cannot transition ${msgPartial} because record type is missing`);
271
- return;
314
+ throw new Error(`Cannot transition ${msgPartial} because record type is missing`);
272
315
  }
273
316
  const nextStepResp = await WorkflowStepsService.get(recordType, targetStep).toPromise();
274
317
  const metadata = currentRec.metadata;
@@ -278,7 +321,7 @@ var Services;
278
321
  sails.log.info(`FigService - updated ${msgPartial}`);
279
322
  }
280
323
  else {
281
- sails.log.error(`FigService - failed to update ${msgPartial}: ${JSON.stringify(recordUpdateResult)}`);
324
+ throw new Error(`Failed to update ${msgPartial}: ${JSON.stringify(recordUpdateResult)}`);
282
325
  }
283
326
  }
284
327
  async syncRecordWithFigshare(record, jobId, triggerSource = 'manual') {
@@ -291,7 +334,8 @@ var Services;
291
334
  if (plan.action === 'skip') {
292
335
  return record;
293
336
  }
294
- const auditCtx = this.startIntegrationAudit(rm, IntegrationAuditModel_1.IntegrationAuditAction.syncRecordWithFigshare, {
337
+ const runContext = (0, context_1.createRunContext)(rm, config, jobId, triggerSource);
338
+ const auditCtx = (0, audit_1.startFigshareAudit)(runContext.recordOid, IntegrationAuditModel_1.IntegrationAuditAction.syncRecordWithFigshare, runContext, {
295
339
  triggerSource,
296
340
  jobId,
297
341
  correlationId: plan.syncState.correlationId,
@@ -307,7 +351,7 @@ var Services;
307
351
  article = await this.makeClient(config, rm, plan.syncState.correlationId, triggerSource).getArticle(String(article?.id ?? plan.articleId ?? ''));
308
352
  }
309
353
  const updatedRecord = this.writeBack(rm, article, publishResult, assetSyncResult);
310
- this.completeIntegrationAudit(auditCtx, {
354
+ (0, audit_1.completeFigshareAudit)(auditCtx, {
311
355
  message: 'Figshare sync completed successfully.',
312
356
  responseSummary: {
313
357
  triggerSource,
@@ -326,9 +370,11 @@ var Services;
326
370
  syncState.status = 'failed';
327
371
  syncState.lastError = error instanceof Error ? error.message : String(error);
328
372
  this.setSyncState(config, rm, syncState);
329
- this.failIntegrationAudit(auditCtx, error, {
373
+ const errorSummary = this.summarizeError(error);
374
+ (0, audit_1.failFigshareAudit)(auditCtx, error, {
330
375
  message: 'Figshare sync failed.',
331
376
  errorDetail: error instanceof Error ? error.message : String(error),
377
+ httpStatusCode: errorSummary.statusCode,
332
378
  responseSummary: {
333
379
  triggerSource,
334
380
  jobId,
@@ -336,34 +382,66 @@ var Services;
336
382
  articleId: plan.articleId,
337
383
  phase: 'syncRecordWithFigshare',
338
384
  partialProgress: syncState.partialProgress,
385
+ ...(errorSummary.responseSummary != null ? { error: errorSummary.responseSummary } : {}),
339
386
  },
340
387
  });
341
- throw error;
388
+ this.wrapHttpError(error, TranslationService.t('figshare-error-syncing-record'));
342
389
  }
343
390
  }
344
391
  async persistSyncRecord(oid, record, user) {
345
392
  try {
346
393
  const brandName = (0, config_1.getBrandName)(record);
347
394
  const brand = BrandingService.getBrand(brandName);
348
- await RecordsService.updateMeta(brand, oid, record, user, false, false);
395
+ const response = await RecordsService.updateMeta(brand, oid, record, user, false, false);
396
+ if (response != null && typeof response.isSuccessful === 'function' && !response.isSuccessful()) {
397
+ sails.log.error(`FigService - failed to persist Figshare sync state for ${oid}: ${JSON.stringify(response)}`);
398
+ return false;
399
+ }
400
+ return true;
349
401
  }
350
402
  catch (error) {
351
403
  sails.log.error(`FigService - failed to persist Figshare sync state for ${oid}`, error);
404
+ return false;
352
405
  }
353
406
  }
354
- createUpdateFigshareArticle(oid, record, _options, _user) {
407
+ createUpdateFigshareArticle(oid, record, options, user) {
408
+ if (!this.shouldRunFigshareLifecycleSync(oid, record, options, user)) {
409
+ sails.log.debug(`FigService - createUpdateFigshareArticle trigger condition not met for ${oid}`);
410
+ return record;
411
+ }
355
412
  if (this.getConfig(record) == null) {
356
413
  return record;
357
414
  }
358
415
  return this.syncRecordWithFigshare(record, `${oid}:pre`, 'pre-save');
359
416
  }
360
- uploadFilesToFigshareArticle(oid, record, _options, user) {
417
+ uploadFilesToFigshareArticle(oid, record, options, user) {
418
+ if (!this.shouldRunFigshareLifecycleSync(oid, record, options, user)) {
419
+ sails.log.debug(`FigService - uploadFilesToFigshareArticle trigger condition not met for ${oid}`);
420
+ return record;
421
+ }
361
422
  if (this.getConfig(record) == null) {
362
- return;
423
+ return record;
363
424
  }
364
425
  void this.syncRecordWithFigshare(record, `${oid}:post`, 'post-save')
365
426
  .then(async (updatedRecord) => {
366
- await this.persistSyncRecord(oid, updatedRecord, user);
427
+ const persisted = await this.persistSyncRecord(oid, updatedRecord, user);
428
+ if (persisted === false) {
429
+ const config = this.getConfig(updatedRecord);
430
+ if (config != null) {
431
+ const runContext = (0, context_1.createRunContext)(updatedRecord, config, `${oid}:post-persist`, 'post-save');
432
+ const auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.syncRecordWithFigshare, runContext, {
433
+ triggerSource: 'post-save',
434
+ jobId: `${oid}:post-persist`,
435
+ correlationId: `${oid}:post-persist`,
436
+ phase: 'persist-sync-record',
437
+ });
438
+ (0, audit_1.failFigshareAudit)(auditCtx, new Error(`Failed to persist Figshare sync state for record '${oid}'.`), {
439
+ message: 'Figshare sync failed while persisting Redbox state.',
440
+ responseSummary: { oid, phase: 'persist-sync-record' },
441
+ });
442
+ }
443
+ return;
444
+ }
367
445
  const config = this.getConfig(updatedRecord);
368
446
  if (config != null) {
369
447
  const rm = updatedRecord;
@@ -387,7 +465,7 @@ var Services;
387
465
  sails.log.error(`FigService - uploadFilesToFigshareArticle sync failed for ${oid}`, error);
388
466
  });
389
467
  }
390
- deleteFilesFromRedboxTrigger(oid, record, options, user) {
468
+ async deleteFilesFromRedboxTrigger(oid, record, options, user) {
391
469
  const config = this.getConfig(record);
392
470
  const rm = record;
393
471
  if (config == null) {
@@ -398,13 +476,36 @@ var Services;
398
476
  if (articleId === '') {
399
477
  return record;
400
478
  }
401
- return this.cleanupUploadedFiles(rm, articleId);
479
+ const runContext = (0, context_1.createRunContext)(rm, config, `${oid}:cleanup-trigger`, 'deleteFilesFromRedboxTrigger');
480
+ const auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.cleanupUploadedFilesJob, runContext, {
481
+ triggerSource: 'deleteFilesFromRedboxTrigger',
482
+ jobId: `${oid}:cleanup-trigger`,
483
+ articleId,
484
+ phase: 'cleanup-uploaded-files',
485
+ });
486
+ try {
487
+ const updatedRecord = await this.cleanupUploadedFiles(rm, articleId);
488
+ (0, audit_1.completeFigshareAudit)(auditCtx, {
489
+ message: 'Figshare uploaded file cleanup trigger completed successfully.',
490
+ responseSummary: { articleId, phase: 'cleanup-uploaded-files' },
491
+ });
492
+ return updatedRecord;
493
+ }
494
+ catch (error) {
495
+ (0, audit_1.failFigshareAudit)(auditCtx, error, {
496
+ message: 'Figshare uploaded file cleanup trigger failed.',
497
+ errorDetail: error instanceof Error ? error.message : String(error),
498
+ responseSummary: { articleId, phase: 'cleanup-uploaded-files' },
499
+ });
500
+ throw error;
501
+ }
402
502
  }
403
503
  return record;
404
504
  }
405
505
  async publishAfterUploadFilesJob(job) {
406
506
  const data = job?.attrs?.data;
407
507
  if (data == null || (data.oid == null && data.articleId == null)) {
508
+ sails.log.warn('FigService - publish-after-uploads job received no usable payload');
408
509
  return;
409
510
  }
410
511
  const oid = data.oid ?? '';
@@ -420,50 +521,55 @@ var Services;
420
521
  if (config == null) {
421
522
  return;
422
523
  }
423
- if (!articleId.trim()) {
424
- sails.log.error(`FigService - cannot publish uploaded files for record '${oid}' because the Figshare article id is empty`);
425
- return;
426
- }
427
- const auditCtx = this.startIntegrationAudit(record, IntegrationAuditModel_1.IntegrationAuditAction.publishAfterUploadFilesJob, {
524
+ const runContext = (0, context_1.createRunContext)(record, config, `${oid}:publish-job`, 'publishAfterUploadFilesJob');
525
+ const auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.publishAfterUploadFilesJob, runContext, {
428
526
  triggerSource: 'publishAfterUploadFilesJob',
429
527
  jobId: `${oid}:publish-job`,
430
528
  correlationId: `${oid}:publish-job`,
431
529
  articleId,
432
530
  phase: 'publish',
433
531
  });
532
+ if (!articleId.trim()) {
533
+ const error = new Error(`Cannot publish uploaded files for record '${oid}' because the Figshare article id is empty`);
534
+ sails.log.error(`FigService - ${error.message}`);
535
+ (0, audit_1.failFigshareAudit)(auditCtx, error, {
536
+ message: 'Figshare publish-after-uploads job failed.',
537
+ errorDetail: error.message,
538
+ responseSummary: {
539
+ articleId,
540
+ correlationId: `${oid}:publish-job`,
541
+ phase: 'publish',
542
+ },
543
+ });
544
+ return;
545
+ }
434
546
  const client = this.makeClient(config, record, `${oid}:publish-job`, 'publishAfterUploadFilesJob');
435
547
  try {
436
548
  await this.ensureNoFileUploadInProgress(config, record, articleId);
437
549
  }
438
550
  catch (error) {
439
551
  if (!(error instanceof RBValidationError_1.RBValidationError)) {
440
- this.failIntegrationAudit(auditCtx, error, {
552
+ const errorSummary = this.summarizeError(error);
553
+ (0, audit_1.failFigshareAudit)(auditCtx, error, {
441
554
  message: 'Figshare publish-after-uploads job failed while checking upload status.',
442
555
  errorDetail: error instanceof Error ? error.message : String(error),
556
+ httpStatusCode: errorSummary.statusCode,
443
557
  responseSummary: {
444
558
  articleId,
445
559
  correlationId: `${oid}:publish-job`,
446
560
  phase: 'verify-upload-status',
561
+ ...(errorSummary.responseSummary != null ? { error: errorSummary.responseSummary } : {}),
447
562
  },
448
563
  });
449
- throw error;
564
+ this.wrapHttpError(error, TranslationService.t('figshare-error-verifying-upload'));
450
565
  }
451
566
  sails.log.warn(`FigService - article '${articleId}' still has uploads in progress, rescheduling deferred publish`, error);
452
567
  try {
453
568
  this.queuePublishAfterUploadFiles(oid, articleId, user, brandId);
454
- this.completeIntegrationAudit(auditCtx, {
455
- message: 'Figshare publish-after-uploads job rescheduled because file uploads are still in progress.',
456
- responseSummary: {
457
- articleId,
458
- correlationId: `${oid}:publish-job`,
459
- phase: 'publish',
460
- rescheduled: true,
461
- },
462
- });
463
569
  return;
464
570
  }
465
571
  catch (queueError) {
466
- this.failIntegrationAudit(auditCtx, queueError, {
572
+ (0, audit_1.failFigshareAudit)(auditCtx, queueError, {
467
573
  message: 'Figshare publish-after-uploads job could not be rescheduled while uploads were still in progress.',
468
574
  errorDetail: queueError instanceof Error ? queueError.message : String(queueError),
469
575
  responseSummary: {
@@ -480,42 +586,46 @@ var Services;
480
586
  const publishResult = await client.publishArticle(articleId, {});
481
587
  const article = await client.getArticle(articleId);
482
588
  const updatedRecord = this.writeBack(record, article, publishResult);
483
- await this.persistSyncRecord(oid, updatedRecord, user);
484
- this.completeIntegrationAudit(auditCtx, {
589
+ const persisted = await this.persistSyncRecord(oid, updatedRecord, user);
590
+ if (persisted === false) {
591
+ throw new Error(`Failed to persist Figshare publish state for record '${oid}'.`);
592
+ }
593
+ this.queueDeleteFiles(oid, user, brandId, articleId);
594
+ (0, audit_1.completeFigshareAudit)(auditCtx, {
485
595
  message: 'Figshare publish-after-uploads job completed successfully.',
486
596
  responseSummary: {
487
597
  articleId,
488
598
  correlationId: `${oid}:publish-job`,
489
599
  publishResult,
600
+ cleanupQueued: true,
490
601
  },
491
602
  });
492
603
  }
493
604
  catch (error) {
494
- this.failIntegrationAudit(auditCtx, error, {
605
+ const errorSummary = this.summarizeError(error);
606
+ (0, audit_1.failFigshareAudit)(auditCtx, error, {
495
607
  message: 'Figshare publish-after-uploads job failed.',
496
608
  errorDetail: error instanceof Error ? error.message : String(error),
609
+ httpStatusCode: errorSummary.statusCode,
497
610
  responseSummary: {
498
611
  articleId,
499
612
  correlationId: `${oid}:publish-job`,
500
613
  phase: 'publish',
614
+ ...(errorSummary.responseSummary != null ? { error: errorSummary.responseSummary } : {}),
501
615
  },
502
616
  });
503
- throw error;
504
- }
505
- try {
506
- this.queueDeleteFiles(oid, user, brandId, articleId);
507
- }
508
- catch (error) {
509
- sails.log.warn(`FigService - unable to queue uploaded file cleanup after successful publish for oid ${oid}`, error);
617
+ this.wrapHttpError(error, TranslationService.t('figshare-error-publishing-article'));
510
618
  }
511
619
  }
512
620
  async deleteFilesFromRedbox(job) {
513
621
  const data = job?.attrs?.data;
514
622
  if (data == null || (data.oid == null && data.articleId == null)) {
623
+ sails.log.warn('FigService - uploaded file cleanup job received no usable payload');
515
624
  return;
516
625
  }
517
626
  const oid = data.oid ?? '';
518
627
  const articleId = data.articleId ?? '';
628
+ const brandId = data.brandId ?? '';
519
629
  const user = data.user;
520
630
  if (!oid.trim()) {
521
631
  return;
@@ -525,8 +635,33 @@ var Services;
525
635
  if (config == null) {
526
636
  return;
527
637
  }
528
- record = await this.cleanupUploadedFiles(record, articleId);
529
- await this.persistSyncRecord(oid, record, user);
638
+ const runContext = (0, context_1.createRunContext)(record, config, `${oid}:cleanup-job`, 'deleteFilesFromRedbox');
639
+ const auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.cleanupUploadedFilesJob, runContext, {
640
+ triggerSource: 'deleteFilesFromRedbox',
641
+ jobId: `${oid}:cleanup-job`,
642
+ correlationId: `${oid}:cleanup-job`,
643
+ articleId,
644
+ phase: 'cleanup-uploaded-files',
645
+ });
646
+ try {
647
+ record = await this.cleanupUploadedFiles(record, articleId);
648
+ const persisted = await this.persistSyncRecord(oid, record, user);
649
+ if (persisted === false) {
650
+ throw new Error(`Failed to persist Figshare cleanup state for record '${oid}'.`);
651
+ }
652
+ (0, audit_1.completeFigshareAudit)(auditCtx, {
653
+ message: 'Figshare uploaded file cleanup job completed successfully.',
654
+ responseSummary: { articleId, brandId, phase: 'cleanup-uploaded-files' },
655
+ });
656
+ }
657
+ catch (error) {
658
+ (0, audit_1.failFigshareAudit)(auditCtx, error, {
659
+ message: 'Figshare uploaded file cleanup job failed.',
660
+ errorDetail: error instanceof Error ? error.message : String(error),
661
+ responseSummary: { articleId, brandId, phase: 'cleanup-uploaded-files' },
662
+ });
663
+ throw error;
664
+ }
530
665
  }
531
666
  queuePublishAfterUploadFiles(oid, articleId, user, brandId) {
532
667
  const queueMessage = (0, queue_1.buildPublishAfterUploadsMessage)(oid, articleId, user, brandId);
@@ -579,7 +714,7 @@ var Services;
579
714
  const userType = jobConfig.userType ?? '';
580
715
  const user = await UsersService.getUserWithUsername(username).toPromise();
581
716
  if (!user || !user?.username || user?.type !== userType) {
582
- sails.log.error(`FigService - cannot run job because could not find user with username '${username}' and type '${userType}' user:`, user);
717
+ sails.log.error(`FigService - cannot run job because could not find user with username '${username}' and type '${userType}'`, { type: user?.type });
583
718
  return;
584
719
  }
585
720
  const namedQueryConfig = await NamedQueryService.getNamedQueryConfig(brand, namedQuery);
@@ -593,6 +728,7 @@ var Services;
593
728
  if (oid === '') {
594
729
  continue;
595
730
  }
731
+ let auditCtx = null;
596
732
  try {
597
733
  const record = await RecordsService.getMeta(oid);
598
734
  const config = this.getConfig(record);
@@ -600,10 +736,28 @@ var Services;
600
736
  continue;
601
737
  }
602
738
  const articleId = String((0, types_1.getRecordField)(record, config.record.articleIdPath) ?? '');
739
+ const runContext = (0, context_1.createRunContext)(record, config, `${oid}:workflow-transition`, 'transitionRecordWorkflowFromFigshareArticlePropertiesJob');
740
+ auditCtx = (0, audit_1.startFigshareAudit)(oid, IntegrationAuditModel_1.IntegrationAuditAction.transitionRecordWorkflowFromFigshareArticlePropertiesJob, runContext, {
741
+ triggerSource: 'transitionRecordWorkflowFromFigshareArticlePropertiesJob',
742
+ jobId: `${oid}:workflow-transition`,
743
+ correlationId: `${oid}:workflow-transition`,
744
+ articleId,
745
+ targetStep,
746
+ phase: 'workflow-transition',
747
+ });
603
748
  await this.transitionWorkflowForRecord(record, user, oid, articleId, targetStep, figshareTargetFieldKey, figshareTargetFieldValue);
749
+ (0, audit_1.completeFigshareAudit)(auditCtx, {
750
+ message: 'Figshare workflow transition job completed successfully for record.',
751
+ responseSummary: { articleId, targetStep, phase: 'workflow-transition' },
752
+ });
604
753
  }
605
754
  catch (error) {
606
755
  sails.log.warn(`FigService - transitionRecordWorkflowFromFigshareArticlePropertiesJob unable to process oid ${oid}`, error);
756
+ (0, audit_1.failFigshareAudit)(auditCtx, error, {
757
+ message: 'Figshare workflow transition job failed for record.',
758
+ errorDetail: error instanceof Error ? error.message : String(error),
759
+ responseSummary: { oid, targetStep, phase: 'workflow-transition' },
760
+ });
607
761
  }
608
762
  }
609
763
  }
@@ -615,4 +769,4 @@ var Services;
615
769
  Services.FigshareService = FigshareService;
616
770
  })(Services || (exports.Services = Services = {}));
617
771
  module.exports.Services = Services;
618
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlnc2hhcmVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0ZpZ3NoYXJlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBc0Q7QUFDdEQsaURBQWlIO0FBQ2pILG1EQUF5RDtBQUN6RCw2Q0FBa0Y7QUFDbEYscURBQW9FO0FBQ3BFLGlEQUF1RDtBQUN2RCxtREFBeUQ7QUFDekQsbURBQTZEO0FBQzdELHVEQUF5RDtBQUN6RCxxREFBMkc7QUFDM0csK0NBQStGO0FBQy9GLHFEQUF3RTtBQUN4RSw2Q0FBdUY7QUFDdkYsa0VBQStEO0FBRy9ELGtGQUFnRjtBQUNoRiwrQ0FjNkI7QUFTN0IsSUFBaUIsUUFBUSxDQXdwQnhCO0FBeHBCRCxXQUFpQixRQUFRO0lBQ3ZCLE1BQWEsZUFBZ0IsU0FBUSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQ3JDLGdCQUFnQixHQUFhO1lBQzlDLDZCQUE2QjtZQUM3Qiw4QkFBOEI7WUFDOUIsdUJBQXVCO1lBQ3ZCLDhCQUE4QjtZQUM5Qiw0QkFBNEI7WUFDNUIsa0JBQWtCO1lBQ2xCLDhCQUE4QjtZQUM5QiwwREFBMEQ7WUFDMUQsb0JBQW9CO1lBQ3BCLGNBQWM7WUFDZCxZQUFZO1lBQ1osYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixXQUFXO1lBQ1gsd0JBQXdCO1lBQ3hCLE1BQU07U0FDUCxDQUFDO1FBRU0scUJBQXFCLENBQzNCLE1BQW1CLEVBQ25CLE1BQThCLEVBQzlCLE9BQWdDO1lBRWhDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRTtnQkFDckQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTztnQkFDckMsV0FBVyxFQUFF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
772
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlnc2hhcmVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL0ZpZ3NoYXJlU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnREFBc0Q7QUFDdEQsaURBQWlIO0FBQ2pILG1EQUF5RDtBQUN6RCw2Q0FBa0Y7QUFDbEYscURBQW9FO0FBQ3BFLGlEQUF1RDtBQUN2RCxtREFBeUQ7QUFDekQsbURBQTZEO0FBQzdELHVEQUF5RDtBQUN6RCwrQ0FBbUc7QUFDbkcsbURBTStCO0FBQy9CLCtDQUErRjtBQUMvRixxREFBd0U7QUFDeEUsNkNBQXVGO0FBQ3ZGLGtFQUErRDtBQUUvRCxrRkFBZ0Y7QUFDaEYsK0NBYzZCO0FBSTdCLElBQWlCLFFBQVEsQ0E4eUJ4QjtBQTl5QkQsV0FBaUIsUUFBUTtJQUN2QixNQUFhLGVBQWdCLFNBQVEsc0JBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTztRQUNyQyxnQkFBZ0IsR0FBYTtZQUM5Qyw2QkFBNkI7WUFDN0IsOEJBQThCO1lBQzlCLHVCQUF1QjtZQUN2Qiw4QkFBOEI7WUFDOUIsNEJBQTRCO1lBQzVCLGtCQUFrQjtZQUNsQiw4QkFBOEI7WUFDOUIsMERBQTBEO1lBQzFELG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsWUFBWTtZQUNaLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsV0FBVztZQUNYLHdCQUF3QjtZQUN4QixNQUFNO1NBQ1AsQ0FBQztRQUVNLFVBQVUsQ0FBVTtRQUVwQixTQUFTO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7UUFFTyw2QkFBNkIsQ0FBQyxPQUFnQztZQUNwRSxPQUFPLE9BQU8sT0FBTyxFQUFF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