@researchdatabox/redbox-core 0.0.1-beta.9950 → 5.0.0-RC2

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 (376) 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.map +1 -1
  75. package/dist/config/reusableContributorFormDefinitions.config.js +11 -5
  76. package/dist/config/reusableViewFormDefinitions.config.d.ts.map +1 -1
  77. package/dist/config/reusableViewFormDefinitions.config.js +15 -4
  78. package/dist/config/routes.config.d.ts.map +1 -1
  79. package/dist/config/routes.config.js +13 -3
  80. package/dist/config/solr.config.d.ts +1 -0
  81. package/dist/config/solr.config.d.ts.map +1 -1
  82. package/dist/config/solr.config.js +3 -2
  83. package/dist/config/static_assets.config.d.ts +2 -0
  84. package/dist/config/static_assets.config.d.ts.map +1 -1
  85. package/dist/config/static_assets.config.js +4 -2
  86. package/dist/config/storage.config.d.ts.map +1 -1
  87. package/dist/config/storage.config.js +7 -1
  88. package/dist/config/views.config.d.ts.map +1 -1
  89. package/dist/config/views.config.js +2 -6
  90. package/dist/config/vocab.config.d.ts +4 -0
  91. package/dist/config/vocab.config.d.ts.map +1 -1
  92. package/dist/config/vocab.config.js +1 -1
  93. package/dist/config/workflow.config.d.ts +7 -0
  94. package/dist/config/workflow.config.d.ts.map +1 -1
  95. package/dist/config/workflow.config.js +9 -194
  96. package/dist/config/workspacetype.config.d.ts +7 -0
  97. package/dist/config/workspacetype.config.d.ts.map +1 -1
  98. package/dist/config/workspacetype.config.js +9 -10
  99. package/dist/configmodels/ConfigModels.d.ts +1 -1
  100. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  101. package/dist/configmodels/ConfigModels.js +9 -1
  102. package/dist/configmodels/DoiPublishing.d.ts +1 -1
  103. package/dist/configmodels/DoiPublishing.d.ts.map +1 -1
  104. package/dist/configmodels/FigsharePublishing.d.ts +746 -217
  105. package/dist/configmodels/FigsharePublishing.d.ts.map +1 -1
  106. package/dist/configmodels/FigsharePublishing.js +181 -190
  107. package/dist/configmodels/IntegrationNotificationConfig.d.ts +133 -0
  108. package/dist/configmodels/IntegrationNotificationConfig.d.ts.map +1 -0
  109. package/dist/configmodels/IntegrationNotificationConfig.js +64 -0
  110. package/dist/constants/export.d.ts +2 -0
  111. package/dist/constants/export.d.ts.map +1 -0
  112. package/dist/constants/export.js +8 -0
  113. package/dist/controllers/AdminController.d.ts.map +1 -1
  114. package/dist/controllers/AdminController.js +1 -1
  115. package/dist/controllers/AsynchController.d.ts +4 -1
  116. package/dist/controllers/AsynchController.d.ts.map +1 -1
  117. package/dist/controllers/AsynchController.js +118 -9
  118. package/dist/controllers/BrandingAppController.d.ts +2 -0
  119. package/dist/controllers/BrandingAppController.d.ts.map +1 -1
  120. package/dist/controllers/BrandingAppController.js +40 -2
  121. package/dist/controllers/BrandingController.d.ts +8 -0
  122. package/dist/controllers/BrandingController.d.ts.map +1 -1
  123. package/dist/controllers/BrandingController.js +45 -1
  124. package/dist/controllers/ExportController.d.ts.map +1 -1
  125. package/dist/controllers/ExportController.js +6 -10
  126. package/dist/controllers/RecordAuditController.d.ts +2 -0
  127. package/dist/controllers/RecordAuditController.d.ts.map +1 -1
  128. package/dist/controllers/RecordAuditController.js +55 -1
  129. package/dist/controllers/RecordController.d.ts +5 -1
  130. package/dist/controllers/RecordController.d.ts.map +1 -1
  131. package/dist/controllers/RecordController.js +51 -21
  132. package/dist/controllers/UserController.d.ts.map +1 -1
  133. package/dist/controllers/UserController.js +3 -2
  134. package/dist/controllers/VocabularyController.js +4 -4
  135. package/dist/controllers/index.d.ts.map +1 -1
  136. package/dist/controllers/index.js +7 -1
  137. package/dist/controllers/webservice/BrandingController.d.ts +1 -0
  138. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  139. package/dist/controllers/webservice/BrandingController.js +69 -10
  140. package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
  141. package/dist/controllers/webservice/ExportController.js +6 -10
  142. package/dist/controllers/webservice/FigshareCrosswalkController.d.ts +20 -0
  143. package/dist/controllers/webservice/FigshareCrosswalkController.d.ts.map +1 -0
  144. package/dist/controllers/webservice/FigshareCrosswalkController.js +184 -0
  145. package/dist/controllers/webservice/FigshareVocabularyController.d.ts +21 -0
  146. package/dist/controllers/webservice/FigshareVocabularyController.d.ts.map +1 -0
  147. package/dist/controllers/webservice/FigshareVocabularyController.js +223 -0
  148. package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -1
  149. package/dist/controllers/webservice/IntegrationAuditController.js +1 -1
  150. package/dist/controllers/webservice/RecordController.d.ts +6 -1
  151. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  152. package/dist/controllers/webservice/RecordController.js +64 -13
  153. package/dist/controllers/webservice/UserManagementController.d.ts +5 -3
  154. package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
  155. package/dist/controllers/webservice/UserManagementController.js +140 -9
  156. package/dist/controllers/webservice/figshare-vocabulary-errors.d.ts +14 -0
  157. package/dist/controllers/webservice/figshare-vocabulary-errors.d.ts.map +1 -0
  158. package/dist/controllers/webservice/figshare-vocabulary-errors.js +39 -0
  159. package/dist/form-config/index.d.ts +7 -0
  160. package/dist/form-config/index.d.ts.map +1 -1
  161. package/dist/form-config/index.js +8 -5
  162. package/dist/hooks/defineRedboxHook.d.ts +11 -2
  163. package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
  164. package/dist/hooks/defineRedboxHook.js +36 -7
  165. package/dist/hooks/hookDiscovery.d.ts +20 -0
  166. package/dist/hooks/hookDiscovery.d.ts.map +1 -0
  167. package/dist/hooks/hookDiscovery.js +186 -0
  168. package/dist/hooks/hookResources.d.ts +23 -0
  169. package/dist/hooks/hookResources.d.ts.map +1 -0
  170. package/dist/hooks/hookResources.js +136 -0
  171. package/dist/hooks/index.d.ts +4 -0
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/index.js +14 -2
  174. package/dist/index.d.ts +6 -1
  175. package/dist/index.d.ts.map +1 -1
  176. package/dist/index.js +15 -2
  177. package/dist/loader/index.d.ts +2 -0
  178. package/dist/loader/index.d.ts.map +1 -1
  179. package/dist/loader/index.js +82 -64
  180. package/dist/model/storage/BrandingModel.d.ts +2 -0
  181. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  182. package/dist/model/storage/BrandingModel.js +3 -1
  183. package/dist/model/storage/IntegrationAuditModel.d.ts +2 -0
  184. package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
  185. package/dist/model/storage/IntegrationAuditModel.js +3 -1
  186. package/dist/policies/i18nLanguages.d.ts.map +1 -1
  187. package/dist/policies/i18nLanguages.js +1 -1
  188. package/dist/policies/menuResolver.d.ts.map +1 -1
  189. package/dist/policies/menuResolver.js +1 -1
  190. package/dist/policies/setLang.d.ts.map +1 -1
  191. package/dist/policies/setLang.js +1 -1
  192. package/dist/responses/badRequest.d.ts.map +1 -1
  193. package/dist/responses/badRequest.js +3 -2
  194. package/dist/responses/created.d.ts.map +1 -1
  195. package/dist/responses/created.js +3 -2
  196. package/dist/responses/forbidden.d.ts.map +1 -1
  197. package/dist/responses/forbidden.js +3 -2
  198. package/dist/responses/ok.d.ts.map +1 -1
  199. package/dist/responses/ok.js +3 -2
  200. package/dist/responses/serverError.d.ts.map +1 -1
  201. package/dist/responses/serverError.js +3 -2
  202. package/dist/responses/siteTitle.d.ts.map +1 -1
  203. package/dist/responses/siteTitle.js +1 -1
  204. package/dist/services/AgendaQueueService.d.ts +1 -0
  205. package/dist/services/AgendaQueueService.d.ts.map +1 -1
  206. package/dist/services/AgendaQueueService.js +24 -9
  207. package/dist/services/BrandingLogoService.d.ts +25 -1
  208. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  209. package/dist/services/BrandingLogoService.js +56 -5
  210. package/dist/services/BrandingThemeTokens.d.ts.map +1 -1
  211. package/dist/services/BrandingThemeTokens.js +2 -1
  212. package/dist/services/DoiService.js +5 -5
  213. package/dist/services/EmailService.d.ts +12 -4
  214. package/dist/services/EmailService.d.ts.map +1 -1
  215. package/dist/services/EmailService.js +28 -19
  216. package/dist/services/FigshareService.d.ts +12 -7
  217. package/dist/services/FigshareService.d.ts.map +1 -1
  218. package/dist/services/FigshareService.js +258 -104
  219. package/dist/services/FigshareVocabularyService.d.ts +442 -0
  220. package/dist/services/FigshareVocabularyService.d.ts.map +1 -0
  221. package/dist/services/FigshareVocabularyService.js +1802 -0
  222. package/dist/services/FormVocabularyService.d.ts.map +1 -1
  223. package/dist/services/FormVocabularyService.js +28 -7
  224. package/dist/services/HarvestRunService.d.ts.map +1 -1
  225. package/dist/services/HarvestRunService.js +1 -1
  226. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  227. package/dist/services/I18nEntriesService.js +26 -4
  228. package/dist/services/IntegrationAuditService.d.ts +58 -0
  229. package/dist/services/IntegrationAuditService.d.ts.map +1 -1
  230. package/dist/services/IntegrationAuditService.js +292 -15
  231. package/dist/services/IntegrationNotificationService.d.ts +55 -0
  232. package/dist/services/IntegrationNotificationService.d.ts.map +1 -0
  233. package/dist/services/IntegrationNotificationService.js +271 -0
  234. package/dist/services/NamedQueryService.d.ts.map +1 -1
  235. package/dist/services/NamedQueryService.js +3 -16
  236. package/dist/services/OniService.d.ts.map +1 -1
  237. package/dist/services/OniService.js +3 -5
  238. package/dist/services/RDMPService.d.ts +2 -0
  239. package/dist/services/RDMPService.d.ts.map +1 -1
  240. package/dist/services/RDMPService.js +49 -33
  241. package/dist/services/RecordsService.d.ts +9 -2
  242. package/dist/services/RecordsService.d.ts.map +1 -1
  243. package/dist/services/RecordsService.js +66 -46
  244. package/dist/services/ReportsService.d.ts +0 -5
  245. package/dist/services/ReportsService.d.ts.map +1 -1
  246. package/dist/services/ReportsService.js +22 -31
  247. package/dist/services/SolrSearchService.d.ts +10 -2
  248. package/dist/services/SolrSearchService.d.ts.map +1 -1
  249. package/dist/services/SolrSearchService.js +110 -52
  250. package/dist/services/StandardDatastreamService.d.ts +7 -0
  251. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  252. package/dist/services/StandardDatastreamService.js +127 -27
  253. package/dist/services/TemplateService.d.ts +0 -14
  254. package/dist/services/TemplateService.d.ts.map +1 -1
  255. package/dist/services/TemplateService.js +5 -45
  256. package/dist/services/UsersService.d.ts.map +1 -1
  257. package/dist/services/UsersService.js +19 -16
  258. package/dist/services/ViewUtilsService.d.ts +5 -1
  259. package/dist/services/ViewUtilsService.d.ts.map +1 -1
  260. package/dist/services/ViewUtilsService.js +38 -46
  261. package/dist/services/VocabularyService.d.ts +11 -2
  262. package/dist/services/VocabularyService.d.ts.map +1 -1
  263. package/dist/services/VocabularyService.js +46 -20
  264. package/dist/services/doi-v2/audit.d.ts.map +1 -1
  265. package/dist/services/doi-v2/audit.js +1 -1
  266. package/dist/services/doi-v2/bindings.d.ts.map +1 -1
  267. package/dist/services/doi-v2/bindings.js +2 -11
  268. package/dist/services/doi-v2/payload.d.ts.map +1 -1
  269. package/dist/services/doi-v2/payload.js +32 -18
  270. package/dist/services/figshare-v2/assets.d.ts +2 -1
  271. package/dist/services/figshare-v2/assets.d.ts.map +1 -1
  272. package/dist/services/figshare-v2/assets.js +144 -89
  273. package/dist/services/figshare-v2/audit.d.ts +7 -0
  274. package/dist/services/figshare-v2/audit.d.ts.map +1 -0
  275. package/dist/services/figshare-v2/audit.js +30 -0
  276. package/dist/services/figshare-v2/bindings.d.ts +28 -3
  277. package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
  278. package/dist/services/figshare-v2/bindings.js +76 -17
  279. package/dist/services/figshare-v2/categories.d.ts +142 -0
  280. package/dist/services/figshare-v2/categories.d.ts.map +1 -0
  281. package/dist/services/figshare-v2/categories.js +408 -0
  282. package/dist/services/figshare-v2/config.d.ts +10 -0
  283. package/dist/services/figshare-v2/config.d.ts.map +1 -1
  284. package/dist/services/figshare-v2/config.js +64 -2
  285. package/dist/services/figshare-v2/context.d.ts +18 -1
  286. package/dist/services/figshare-v2/context.d.ts.map +1 -1
  287. package/dist/services/figshare-v2/context.js +35 -2
  288. package/dist/services/figshare-v2/embargo.d.ts.map +1 -1
  289. package/dist/services/figshare-v2/embargo.js +6 -4
  290. package/dist/services/figshare-v2/http.d.ts +20 -1
  291. package/dist/services/figshare-v2/http.d.ts.map +1 -1
  292. package/dist/services/figshare-v2/http.js +85 -9
  293. package/dist/services/figshare-v2/metadata.d.ts.map +1 -1
  294. package/dist/services/figshare-v2/metadata.js +150 -35
  295. package/dist/services/figshare-v2/observability.d.ts +1 -2
  296. package/dist/services/figshare-v2/observability.d.ts.map +1 -1
  297. package/dist/services/figshare-v2/observability.js +7 -45
  298. package/dist/services/figshare-v2/runtime.d.ts +5 -2
  299. package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
  300. package/dist/services/figshare-v2/runtime.js +59 -37
  301. package/dist/services/figshare-v2/types.d.ts +18 -0
  302. package/dist/services/figshare-v2/types.d.ts.map +1 -1
  303. package/dist/services/figshare-v2/types.js +1 -1
  304. package/dist/services/figshare-v2/vocabulary-errors.d.ts +39 -0
  305. package/dist/services/figshare-v2/vocabulary-errors.d.ts.map +1 -0
  306. package/dist/services/figshare-v2/vocabulary-errors.js +68 -0
  307. package/dist/services/index.d.ts +6 -0
  308. package/dist/services/index.d.ts.map +1 -1
  309. package/dist/services/index.js +13 -2
  310. package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -1
  311. package/dist/storage/TusStorageManagerDataStore.js +14 -1
  312. package/dist/transformers/ExportJSONTransformer.d.ts +1 -1
  313. package/dist/transformers/ExportJSONTransformer.d.ts.map +1 -1
  314. package/dist/transformers/ExportJSONTransformer.js +3 -3
  315. package/dist/utilities/ContextVariableUtils.d.ts +3 -1
  316. package/dist/utilities/ContextVariableUtils.d.ts.map +1 -1
  317. package/dist/utilities/ContextVariableUtils.js +25 -7
  318. package/dist/utilities/PromiseUtils.d.ts +9 -0
  319. package/dist/utilities/PromiseUtils.d.ts.map +1 -0
  320. package/dist/utilities/PromiseUtils.js +27 -0
  321. package/dist/utilities/RedactionUtils.d.ts +3 -0
  322. package/dist/utilities/RedactionUtils.d.ts.map +1 -0
  323. package/dist/utilities/RedactionUtils.js +55 -0
  324. package/dist/visitor/client.visitor.d.ts +7 -0
  325. package/dist/visitor/client.visitor.d.ts.map +1 -1
  326. package/dist/visitor/client.visitor.js +135 -30
  327. package/dist/visitor/construct.visitor.d.ts +6 -0
  328. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  329. package/dist/visitor/construct.visitor.js +152 -108
  330. package/dist/visitor/data-value.visitor.d.ts +3 -0
  331. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  332. package/dist/visitor/data-value.visitor.js +6 -1
  333. package/dist/visitor/json-type-def.visitor.d.ts +4 -0
  334. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  335. package/dist/visitor/json-type-def.visitor.js +25 -4
  336. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +9 -3
  337. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  338. package/dist/visitor/migrate-config-v4-v5.visitor.js +168 -104
  339. package/dist/visitor/template.visitor.d.ts +3 -0
  340. package/dist/visitor/template.visitor.d.ts.map +1 -1
  341. package/dist/visitor/template.visitor.js +6 -1
  342. package/dist/visitor/validator.visitor.d.ts +3 -1
  343. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  344. package/dist/visitor/validator.visitor.js +8 -2
  345. package/dist/visitor/visitor-helpers.js +2 -2
  346. package/dist/waterline-models/BrandingConfig.d.ts +2 -0
  347. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  348. package/dist/waterline-models/BrandingConfig.js +6 -1
  349. package/dist/waterline-models/FigshareVocabularyCategory.d.ts +38 -0
  350. package/dist/waterline-models/FigshareVocabularyCategory.d.ts.map +1 -0
  351. package/dist/waterline-models/FigshareVocabularyCategory.js +157 -0
  352. package/dist/waterline-models/FigshareVocabularyCrosswalk.d.ts +37 -0
  353. package/dist/waterline-models/FigshareVocabularyCrosswalk.d.ts.map +1 -0
  354. package/dist/waterline-models/FigshareVocabularyCrosswalk.js +153 -0
  355. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.d.ts +37 -0
  356. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.d.ts.map +1 -0
  357. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.js +138 -0
  358. package/dist/waterline-models/FigshareVocabularySource.d.ts +45 -0
  359. package/dist/waterline-models/FigshareVocabularySource.d.ts.map +1 -0
  360. package/dist/waterline-models/FigshareVocabularySource.js +149 -0
  361. package/dist/waterline-models/FigshareVocabularySyncRun.d.ts +70 -0
  362. package/dist/waterline-models/FigshareVocabularySyncRun.d.ts.map +1 -0
  363. package/dist/waterline-models/FigshareVocabularySyncRun.js +237 -0
  364. package/dist/waterline-models/Vocabulary.d.ts +3 -1
  365. package/dist/waterline-models/Vocabulary.d.ts.map +1 -1
  366. package/dist/waterline-models/Vocabulary.js +9 -3
  367. package/dist/waterline-models/index.d.ts +10 -0
  368. package/dist/waterline-models/index.d.ts.map +1 -1
  369. package/dist/waterline-models/index.js +16 -1
  370. package/package.json +28 -31
  371. package/dist/form-config/dataRecord-1.0-draft.d.ts +0 -4
  372. package/dist/form-config/dataRecord-1.0-draft.d.ts.map +0 -1
  373. package/dist/form-config/dataRecord-1.0-draft.js +0 -1042
  374. package/dist/form-config/default-1.0-draft.d.ts +0 -4
  375. package/dist/form-config/default-1.0-draft.d.ts.map +0 -1
  376. package/dist/form-config/default-1.0-draft.js +0 -1156
@@ -4,33 +4,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.syncAssetsPhase = syncAssetsPhase;
7
- const fs_1 = __importDefault(require("fs"));
8
7
  const path_1 = __importDefault(require("path"));
9
- const check_disk_space_1 = __importDefault(require("check-disk-space"));
8
+ const node_crypto_1 = require("node:crypto");
9
+ const node_stream_1 = require("node:stream");
10
10
  const RBValidationError_1 = require("../../model/RBValidationError");
11
11
  const config_1 = require("./config");
12
12
  const plan_1 = require("./plan");
13
- const UNKNOWN_SIZE_STAGING_BUFFER_BYTES = 50 * 1024 * 1024;
14
13
  const LINK_FILE_CREATE_RETRY_COUNT = 3;
15
14
  const FIGSHARE_UPLOAD_PENDING_STATUS = 'created';
16
- function getTempDir(config) {
17
- const configDir = config.assets.staging.tempDir;
18
- if (configDir)
19
- return configDir;
20
- return '/tmp';
21
- }
15
+ const DEFAULT_FIGSHARE_STAGING_DISK = 'figshare-staging';
22
16
  function getRecordOid(record) {
23
17
  return record.redboxOid ?? record.id ?? '';
24
18
  }
25
19
  function getDatastreamService() {
26
20
  const recordConfig = sails.config.record;
27
21
  const serviceName = String(recordConfig?.datastreamService ?? '');
28
- return serviceName ? sails.services?.[serviceName] : undefined;
22
+ return serviceName
23
+ ? sails.services?.[serviceName]
24
+ : undefined;
29
25
  }
30
26
  function validationError(message) {
31
27
  return new RBValidationError_1.RBValidationError({
32
28
  message,
33
- displayErrors: [{ title: message, detail: message }]
29
+ displayErrors: [{ title: message, detail: message }],
34
30
  });
35
31
  }
36
32
  async function getAttachmentStream(oid, fileId) {
@@ -44,21 +40,105 @@ async function getAttachmentStream(oid, fileId) {
44
40
  }
45
41
  return response;
46
42
  }
47
- async function stageAttachmentToDisk(response, filePath) {
48
- await fs_1.default.promises.mkdir(path_1.default.dirname(filePath), { recursive: true });
49
- const readStream = response.readstream;
50
- await new Promise((resolve, reject) => {
51
- const writeStream = fs_1.default.createWriteStream(filePath);
52
- readStream.on('error', reject);
53
- writeStream.on('error', reject);
54
- writeStream.on('close', () => resolve());
55
- readStream.pipe(writeStream);
56
- });
57
- const stat = await fs_1.default.promises.stat(filePath);
58
- return stat.size;
43
+ async function ensureAttachmentDatastream(oid, fileId) {
44
+ const response = await getAttachmentStream(oid, fileId);
45
+ const stream = response.readstream;
46
+ if (typeof stream?.destroy === 'function') {
47
+ const ignoreDestroyError = () => undefined;
48
+ const removeDestroyErrorHandler = () => {
49
+ stream.off('error', ignoreDestroyError);
50
+ stream.off('close', removeDestroyErrorHandler);
51
+ stream.off('finish', removeDestroyErrorHandler);
52
+ };
53
+ stream.once('error', ignoreDestroyError);
54
+ stream.once('close', removeDestroyErrorHandler);
55
+ stream.once('finish', removeDestroyErrorHandler);
56
+ stream.destroy();
57
+ }
59
58
  }
60
59
  function sanitizePathComponent(value) {
61
- return value.replace(/[^A-Za-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'item';
60
+ return (value
61
+ .replace(/[^A-Za-z0-9._-]+/g, '-')
62
+ .replace(/-+/g, '-')
63
+ .replace(/-\./g, '.')
64
+ .replace(/^-+|-+$/g, '') || 'item');
65
+ }
66
+ function getStagingDisk(config) {
67
+ const diskName = config.assets.staging.disk?.trim();
68
+ if (!diskName) {
69
+ return StorageManagerService.stagingDisk();
70
+ }
71
+ try {
72
+ return StorageManagerService.disk(diskName);
73
+ }
74
+ catch (error) {
75
+ if (diskName !== DEFAULT_FIGSHARE_STAGING_DISK) {
76
+ throw error;
77
+ }
78
+ // A deployment that overrides storage.disks may not register the default
79
+ // 'figshare-staging' disk. Fall back to the configured staging disk rather
80
+ // than failing the upload before staging starts.
81
+ sails.log.warn(`FigService - staging disk '${diskName}' is not registered; falling back to the default staging disk`, error);
82
+ return StorageManagerService.stagingDisk();
83
+ }
84
+ }
85
+ function buildStagingKey(config, articleId, oid, fileId, fileName, logger) {
86
+ const prefix = (config.assets.staging.keyPrefix ?? 'figshare/').replace(/^\/+|\/+$/g, '') || 'figshare';
87
+ const originalFileName = path_1.default.basename(fileName).trim();
88
+ if (originalFileName === '') {
89
+ throw validationError(`Attachment '${fileName}' does not contain a valid file name`);
90
+ }
91
+ // basename() can still yield the reserved '.'/'..' segments, which would point the
92
+ // staging key at the directory itself or escape it on an fs-backed disk.
93
+ if (originalFileName === '.' || originalFileName === '..') {
94
+ throw validationError(`Attachment '${fileName}' does not contain a valid file name`);
95
+ }
96
+ const storageFileName = sanitizePathComponent(originalFileName);
97
+ if (storageFileName !== originalFileName) {
98
+ logger?.verbose(`FigService - sanitized staging filename '${originalFileName}' to '${storageFileName}' for attachment '${fileId}'`);
99
+ }
100
+ // Append a per-attempt random segment so concurrent or retried uploads of the
101
+ // same attachment never share a staging key (which would let one attempt
102
+ // overwrite or delete the object another attempt is still streaming).
103
+ const dir = `${sanitizePathComponent(articleId)}-${sanitizePathComponent(oid)}-${sanitizePathComponent(fileId)}-${(0, node_crypto_1.randomUUID)()}`;
104
+ return `${prefix}/${dir}/${storageFileName}`;
105
+ }
106
+ async function stageAttachmentToDisk(disk, key, response) {
107
+ const expectedSize = Number(response.size ?? 0);
108
+ await disk.putStream(key, response.readstream, expectedSize > 0 ? { contentLength: expectedSize } : {});
109
+ const meta = await disk.getMetaData(key);
110
+ return meta.contentLength;
111
+ }
112
+ async function* readPartsSequentially(source, parts) {
113
+ const ordered = [...parts].sort((a, b) => a.startOffset - b.startOffset);
114
+ let consumed = 0;
115
+ let carry = Buffer.alloc(0);
116
+ const iterator = source[Symbol.asyncIterator]();
117
+ for (const part of ordered) {
118
+ const partSize = part.endOffset - part.startOffset + 1;
119
+ if (part.startOffset !== consumed) {
120
+ throw validationError(`Figshare upload part ${part.partNo} starts at ${part.startOffset}; expected ${consumed}`);
121
+ }
122
+ async function* partStream() {
123
+ let need = partSize;
124
+ while (need > 0) {
125
+ if (carry.length === 0) {
126
+ const { value, done } = await iterator.next();
127
+ if (done === true) {
128
+ throw validationError(`Staged object truncated at offset ${consumed}; expected more bytes for part ${part.partNo}`);
129
+ }
130
+ carry = Buffer.isBuffer(value) ? value : Buffer.from(value);
131
+ }
132
+ const take = Math.min(need, carry.length);
133
+ const chunk = carry.subarray(0, take);
134
+ carry = carry.subarray(take);
135
+ need -= take;
136
+ consumed += take;
137
+ yield chunk;
138
+ }
139
+ }
140
+ yield { partNo: part.partNo, stream: node_stream_1.Readable.from(partStream()) };
141
+ }
62
142
  }
63
143
  async function listArticleFiles(client, articleId) {
64
144
  const currentFiles = [];
@@ -78,65 +158,32 @@ async function listArticleFiles(client, articleId) {
78
158
  return currentFiles;
79
159
  }
80
160
  function hasPendingUploads(files) {
81
- return files.some((entry) => String(entry.status ?? '').toLowerCase() === FIGSHARE_UPLOAD_PENDING_STATUS);
161
+ return files.some(entry => String(entry.status ?? '').toLowerCase() === FIGSHARE_UPLOAD_PENDING_STATUS);
82
162
  }
83
- async function uploadAttachment(client, config, articleId, oid, attachment) {
163
+ async function uploadAttachment(client, config, articleId, oid, attachment, logger) {
84
164
  const fileId = attachment.fileId ?? '';
85
165
  const fileName = attachment.name ?? '';
86
166
  if (fileId === '' || fileName === '') {
87
167
  throw validationError('Attachment entry is missing fileId or name');
88
168
  }
89
- const tempDir = getTempDir(config);
90
- const resolvedTempDir = path_1.default.resolve(tempDir);
91
- const safeFileName = path_1.default.basename(fileName).trim();
92
- if (safeFileName === '') {
93
- throw validationError(`Attachment '${fileName}' does not contain a valid file name`);
94
- }
95
- await fs_1.default.promises.mkdir(resolvedTempDir, { recursive: true });
96
- const stagingDir = await fs_1.default.promises.mkdtemp(path_1.default.join(resolvedTempDir, `${sanitizePathComponent(articleId)}-${sanitizePathComponent(oid)}-${sanitizePathComponent(fileId)}-`));
97
- const filePath = path_1.default.resolve(stagingDir, safeFileName);
98
- if (!filePath.startsWith(`${stagingDir}${path_1.default.sep}`) && filePath !== path_1.default.join(stagingDir, safeFileName)) {
99
- throw validationError(`Attachment '${fileName}' resolves outside the staging directory`);
100
- }
169
+ const disk = getStagingDisk(config);
170
+ const stagingKey = buildStagingKey(config, articleId, oid, fileId, fileName, logger);
101
171
  const datastream = await getAttachmentStream(oid, fileId);
102
- const expectedSize = Number(datastream.size ?? 0);
103
- if (expectedSize > 0) {
104
- const diskSpace = await (0, check_disk_space_1.default)(tempDir);
105
- if (diskSpace.free < expectedSize + config.assets.staging.diskSpaceThresholdBytes) {
106
- throw validationError(`Not enough free disk space to upload '${fileName}'`);
107
- }
108
- }
109
- else {
110
- const diskSpace = await (0, check_disk_space_1.default)(tempDir);
111
- const requiredBytes = config.assets.staging.diskSpaceThresholdBytes + UNKNOWN_SIZE_STAGING_BUFFER_BYTES;
112
- if (diskSpace.free < requiredBytes) {
113
- throw validationError(`Not enough free disk space to upload '${fileName}'`);
114
- }
115
- }
116
172
  let uploadSucceeded = false;
117
173
  try {
118
- const stagedSize = await stageAttachmentToDisk(datastream, filePath);
119
- if (expectedSize <= 0) {
120
- const diskSpace = await (0, check_disk_space_1.default)(tempDir);
121
- if (diskSpace.free < stagedSize + config.assets.staging.diskSpaceThresholdBytes) {
122
- throw validationError(`Not enough free disk space to upload '${fileName}'`);
123
- }
124
- }
174
+ const stagedSize = await stageAttachmentToDisk(disk, stagingKey, datastream);
125
175
  const uploadInit = await client.createArticleFile(articleId, {
126
176
  name: fileName,
127
- size: stagedSize
177
+ size: stagedSize,
128
178
  });
129
179
  const uploadDescriptor = await client.getLocation(uploadInit.location);
130
180
  const uploadUrl = uploadDescriptor.upload_url;
131
181
  const figshareFileId = String(uploadDescriptor.id);
132
182
  const partsDescriptor = await client.getLocation(uploadUrl);
133
183
  const parts = partsDescriptor.parts ?? [];
134
- for (const part of parts) {
135
- const readStream = fs_1.default.createReadStream(filePath, {
136
- start: part.startOffset,
137
- end: part.endOffset
138
- });
139
- await client.uploadFilePart(uploadUrl, part.partNo, readStream);
184
+ const source = await disk.getStream(stagingKey);
185
+ for await (const { partNo, stream } of readPartsSequentially(source, parts)) {
186
+ await client.uploadFilePart(uploadUrl, partNo, stream);
140
187
  }
141
188
  await client.completeFileUpload(articleId, figshareFileId, {});
142
189
  const uploadedFile = await client.getLocation(uploadInit.location);
@@ -144,14 +191,19 @@ async function uploadAttachment(client, config, articleId, oid, attachment) {
144
191
  return uploadedFile;
145
192
  }
146
193
  finally {
147
- const shouldDeleteStagingDir = !uploadSucceeded || config.assets.staging.cleanupPolicy === 'deleteAfterSuccess';
148
- if (shouldDeleteStagingDir && fs_1.default.existsSync(stagingDir)) {
149
- await fs_1.default.promises.rm(stagingDir, { recursive: true, force: true });
194
+ // Stored configs may omit cleanupPolicy; default to delete-after-success so
195
+ // staged objects are not retained on the staging disk indefinitely.
196
+ const cleanupPolicy = config.assets.staging.cleanupPolicy ?? 'deleteAfterSuccess';
197
+ const shouldDelete = !uploadSucceeded || cleanupPolicy === 'deleteAfterSuccess';
198
+ if (shouldDelete) {
199
+ await disk
200
+ .delete(stagingKey)
201
+ .catch(error => sails.log.warn(`FigService - failed to delete staged object '${stagingKey}'`, error));
150
202
  }
151
203
  }
152
204
  }
153
205
  async function syncLinkOnlyFiles(client, articleId, selectedUrls, currentFiles) {
154
- const existingLinkFiles = currentFiles.filter((entry) => entry.is_link_only === true);
206
+ const existingLinkFiles = currentFiles.filter(entry => entry.is_link_only === true);
155
207
  const uploadedUrls = [];
156
208
  const creationErrors = [];
157
209
  for (const entry of selectedUrls) {
@@ -164,7 +216,7 @@ async function syncLinkOnlyFiles(client, articleId, selectedUrls, currentFiles)
164
216
  attempt += 1;
165
217
  try {
166
218
  responseLocation = await client.createArticleFile(articleId, {
167
- link: entry.location ?? ''
219
+ link: entry.location ?? '',
168
220
  });
169
221
  break;
170
222
  }
@@ -183,7 +235,7 @@ async function syncLinkOnlyFiles(client, articleId, selectedUrls, currentFiles)
183
235
  name: entry.name ?? entry.originalFileName ?? String(entry.location ?? ''),
184
236
  status: uploadedFile.status,
185
237
  download_url: uploadedFile.download_url,
186
- is_link_only: true
238
+ is_link_only: true,
187
239
  });
188
240
  }
189
241
  catch (error) {
@@ -209,13 +261,13 @@ function toFixtureFigshareFile(entry, articleId, index, isLinkOnly) {
209
261
  size: 0,
210
262
  is_link_only: isLinkOnly,
211
263
  download_url: isLinkOnly ? String(entry.location ?? '') : String(entry.download_url ?? ''),
212
- computed_md5: 'fixture-md5'
264
+ computed_md5: 'fixture-md5',
213
265
  };
214
266
  }
215
- async function syncAssetsPhase(client, config, record, article, syncState) {
267
+ async function syncAssetsPhase(client, config, record, article, syncState, logger) {
216
268
  const selectedDataLocations = (0, plan_1.getSelectedDataLocations)(config, record);
217
- const selectedAttachments = selectedDataLocations.filter((entry) => entry.type === 'attachment');
218
- const selectedUrls = selectedDataLocations.filter((entry) => entry.type === 'url');
269
+ const selectedAttachments = selectedDataLocations.filter(entry => entry.type === 'attachment');
270
+ const selectedUrls = selectedDataLocations.filter(entry => entry.type === 'url');
219
271
  const articleId = String(article.id);
220
272
  const attachmentCount = selectedAttachments.length;
221
273
  const urlCount = selectedUrls.length;
@@ -225,16 +277,17 @@ async function syncAssetsPhase(client, config, record, article, syncState) {
225
277
  }
226
278
  if (config.runtime.mode === 'fixture') {
227
279
  const uploadsComplete = !(attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete');
228
- syncState.status = attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete'
229
- ? 'awaiting_upload_completion'
230
- : 'syncing';
280
+ syncState.status =
281
+ attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete'
282
+ ? 'awaiting_upload_completion'
283
+ : 'syncing';
231
284
  syncState.partialProgress = {
232
285
  articleId,
233
286
  attachmentCount,
234
287
  urlCount,
235
288
  uploadsComplete,
236
289
  uploadedAttachmentCount: attachmentCount,
237
- uploadedUrlCount: urlCount
290
+ uploadedUrlCount: urlCount,
238
291
  };
239
292
  (0, config_1.setSyncState)(config, record, syncState);
240
293
  return {
@@ -244,7 +297,7 @@ async function syncAssetsPhase(client, config, record, article, syncState) {
244
297
  uploadsComplete,
245
298
  uploadedAttachments: selectedAttachments.map((entry, index) => toFixtureFigshareFile(entry, articleId, index, false)),
246
299
  uploadedUrls: selectedUrls.map((entry, index) => toFixtureFigshareFile(entry, articleId, index, true)),
247
- dataLocations: selectedDataLocations
300
+ dataLocations: selectedDataLocations,
248
301
  };
249
302
  }
250
303
  const oid = getRecordOid(record);
@@ -253,12 +306,13 @@ async function syncAssetsPhase(client, config, record, article, syncState) {
253
306
  if (config.assets.enableHostedFiles) {
254
307
  for (const attachment of selectedAttachments) {
255
308
  const fileName = attachment.name ?? '';
256
- const alreadyUploaded = currentFiles.find((entry) => entry.name === fileName);
309
+ const alreadyUploaded = currentFiles.find(entry => entry.name === fileName);
257
310
  if (alreadyUploaded != null) {
311
+ await ensureAttachmentDatastream(oid, attachment.fileId ?? '');
258
312
  uploadedAttachments.push(alreadyUploaded);
259
313
  continue;
260
314
  }
261
- uploadedAttachments.push(await uploadAttachment(client, config, articleId, oid, attachment));
315
+ uploadedAttachments.push(await uploadAttachment(client, config, articleId, oid, attachment, logger));
262
316
  uploadedAttachmentCountThisRun += 1;
263
317
  }
264
318
  }
@@ -271,9 +325,10 @@ async function syncAssetsPhase(client, config, record, article, syncState) {
271
325
  : config.article.publishMode === 'afterUploadsComplete' && uploadedAttachmentCountThisRun > 0
272
326
  ? false
273
327
  : !hasPendingUploads(refreshedFiles);
274
- syncState.status = attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete'
275
- ? 'awaiting_upload_completion'
276
- : 'syncing';
328
+ syncState.status =
329
+ attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete'
330
+ ? 'awaiting_upload_completion'
331
+ : 'syncing';
277
332
  syncState.partialProgress = {
278
333
  articleId,
279
334
  attachmentCount,
@@ -281,7 +336,7 @@ async function syncAssetsPhase(client, config, record, article, syncState) {
281
336
  uploadsComplete,
282
337
  uploadedAttachmentCountThisRun,
283
338
  uploadedAttachmentCount: uploadedAttachments.length,
284
- uploadedUrlCount: uploadedUrls.length
339
+ uploadedUrlCount: uploadedUrls.length,
285
340
  };
286
341
  (0, config_1.setSyncState)(config, record, syncState);
287
342
  return {
@@ -291,7 +346,7 @@ async function syncAssetsPhase(client, config, record, article, syncState) {
291
346
  uploadsComplete,
292
347
  uploadedAttachments,
293
348
  uploadedUrls,
294
- dataLocations: selectedDataLocations
349
+ dataLocations: selectedDataLocations,
295
350
  };
296
351
  }
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXdQQSwwQ0ErRkM7QUF2VkQsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qix3RUFBOEM7QUFHOUMscUVBQWtFO0FBV2xFLHFDQUF3QztBQUN4QyxpQ0FBa0Q7QUFFbEQsTUFBTSxpQ0FBaUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMzRCxNQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQztBQUN2QyxNQUFNLDhCQUE4QixHQUFHLFNBQVMsQ0FBQztBQUVqRCxTQUFTLFVBQVUsQ0FBQyxNQUFvQztJQUN0RCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDaEQsSUFBSSxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDaEMsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQW1CO0lBQ3ZDLE9BQU8sTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxvQkFBb0I7SUFDM0IsTUFBTSxZQUFZLEdBQUksS0FBSyxDQUFDLE1BQWtDLENBQUMsTUFBNkMsQ0FBQztJQUM3RyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBRSxLQUFLLENBQUMsUUFBb0MsRUFBRSxDQUFDLFdBQVcsQ0FBd0MsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JJLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sSUFBSSxxQ0FBaUIsQ0FBQztRQUMzQixP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
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTZWQSwwQ0FzR0M7QUFuY0QsZ0RBQXdCO0FBRXhCLDZDQUF5QztBQUN6Qyw2Q0FBdUM7QUFHdkMscUVBQWtFO0FBYWxFLHFDQUF3QztBQUN4QyxpQ0FBa0Q7QUFJbEQsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSw4QkFBOEIsR0FBRyxTQUFTLENBQUM7QUFDakQsTUFBTSw2QkFBNkIsR0FBRyxrQkFBa0IsQ0FBQztBQUV6RCxTQUFTLFlBQVksQ0FBQyxNQUFtQjtJQUN2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sWUFBWSxHQUFJLEtBQUssQ0FBQyxNQUFrQyxDQUFDLE1BQTZDLENBQUM7SUFDN0csTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxPQUFPLFdBQVc7UUFDaEIsQ0FBQyxDQUFHLEtBQUssQ0FBQyxRQUFvQyxFQUFFLENBQUMsV0FBVyxDQUF5QztRQUNyRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sSUFBSSxxQ0FBaUIsQ0FBQztRQUMzQixPQUFPO1FBQ1AsYUFBYSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUNyRCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBT0QsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQzVELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9C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
@@ -0,0 +1,7 @@
1
+ import type { IntegrationAuditContext } from '../IntegrationAuditService';
2
+ import { IntegrationAuditAction } from '../../model/storage/IntegrationAuditModel';
3
+ import type { FigshareRunContext } from './types';
4
+ export declare function startFigshareAudit(oid: string, action: IntegrationAuditAction, runContext: FigshareRunContext, requestSummary: Record<string, unknown>, parentAuditContext?: IntegrationAuditContext | null): IntegrationAuditContext | null;
5
+ export declare function completeFigshareAudit(ctx: IntegrationAuditContext | null | undefined, details: Record<string, unknown>): void;
6
+ export declare function failFigshareAudit(ctx: IntegrationAuditContext | null | undefined, error: unknown, details: Record<string, unknown>): void;
7
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAwB,MAAM,2CAA2C,CAAC;AACzG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,sBAAsB,EAC9B,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,kBAAkB,CAAC,EAAE,uBAAuB,GAAG,IAAI,GAClD,uBAAuB,GAAG,IAAI,CAYhC;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAI7H;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAIzI"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startFigshareAudit = startFigshareAudit;
4
+ exports.completeFigshareAudit = completeFigshareAudit;
5
+ exports.failFigshareAudit = failFigshareAudit;
6
+ const IntegrationAuditModel_1 = require("../../model/storage/IntegrationAuditModel");
7
+ function startFigshareAudit(oid, action, runContext, requestSummary, parentAuditContext) {
8
+ if (typeof IntegrationAuditService === 'undefined' || typeof IntegrationAuditService.startAudit !== 'function') {
9
+ return null;
10
+ }
11
+ return IntegrationAuditService.startAudit(oid, action, {
12
+ integrationName: IntegrationAuditModel_1.IntegrationAuditName.figshare,
13
+ brandId: runContext.brandId,
14
+ triggeredBy: runContext.triggerSource,
15
+ requestSummary,
16
+ traceId: parentAuditContext?.traceId,
17
+ parentSpanId: parentAuditContext?.spanId,
18
+ });
19
+ }
20
+ function completeFigshareAudit(ctx, details) {
21
+ if (typeof IntegrationAuditService !== 'undefined' && typeof IntegrationAuditService.completeAudit === 'function') {
22
+ IntegrationAuditService.completeAudit(ctx, details);
23
+ }
24
+ }
25
+ function failFigshareAudit(ctx, error, details) {
26
+ if (typeof IntegrationAuditService !== 'undefined' && typeof IntegrationAuditService.failAudit === 'function') {
27
+ IntegrationAuditService.failAudit(ctx, error, details);
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZmlnc2hhcmUtdjIvYXVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSxnREFrQkM7QUFFRCxzREFJQztBQUVELDhDQUlDO0FBakNELHFGQUF5RztBQUd6RyxTQUFnQixrQkFBa0IsQ0FDaEMsR0FBVyxFQUNYLE1BQThCLEVBQzlCLFVBQThCLEVBQzlCLGNBQXVDLEVBQ3ZDLGtCQUFtRDtJQUVuRCxJQUFJLE9BQU8sdUJBQXVCLEtBQUssV0FBVyxJQUFJLE9BQU8sdUJBQXVCLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQy9HLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sdUJBQXVCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUU7UUFDckQsZUFBZSxFQUFFLDRDQUFvQixDQUFDLFFBQVE7UUFDOUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsYUFBYTtRQUNyQyxjQUFjO1FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU87UUFDcEMsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU07S0FDekMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLEdBQStDLEVBQUUsT0FBZ0M7SUFDckgsSUFBSSxPQUFPLHVCQUF1QixLQUFLLFdBQVcsSUFBSSxPQUFPLHVCQUF1QixDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNsSCx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsR0FBK0MsRUFBRSxLQUFjLEVBQUUsT0FBZ0M7SUFDakksSUFBSSxPQUFPLHVCQUF1QixLQUFLLFdBQVcsSUFBSSxPQUFPLHVCQUF1QixDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM5Ryx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -1,6 +1,31 @@
1
- import { ValueBinding } from '../../configmodels/FigsharePublishing';
1
+ import { CrosswalkBinding, ValueBinding } from '../../configmodels/FigsharePublishing';
2
2
  import { AnyRecord } from './types';
3
- export declare function ensureHandlebarsHelpersRegistered(): void;
3
+ import { BindingContext } from './context';
4
+ export interface CrosswalkBindingResult {
5
+ values: Array<number | string>;
6
+ /** Raw candidates taken from the inner source, before normalisation. */
7
+ sourceCodes: string[];
8
+ normalizedCodes: string[];
9
+ unresolvedCodes: string[];
10
+ historicalTargets: Array<{
11
+ code: string;
12
+ categoryId: number;
13
+ sourceId: string;
14
+ }>;
15
+ }
4
16
  export declare function validateHandlebarsTemplate(template: string): void;
5
- export declare function evaluateBinding(binding: ValueBinding | undefined, record: AnyRecord): Promise<unknown>;
17
+ /**
18
+ * Resolve a crosswalk binding: evaluate its inner source for codes, then push those
19
+ * through the approved revision of the configured crosswalk.
20
+ *
21
+ * Returns the full resolution rather than just the values, because the categories
22
+ * payload has to enforce `allowUnmapped` against the historical targets.
23
+ */
24
+ export declare function resolveCrosswalkBinding(binding: CrosswalkBinding, target: AnyRecord, context?: BindingContext): Promise<CrosswalkBindingResult>;
25
+ /**
26
+ * Evaluate a binding against `target`. `context` carries ambient information such
27
+ * as the brand, which the crosswalk kind needs and which `target` may not hold —
28
+ * author lookup rules evaluate against a contributor object, not the record.
29
+ */
30
+ export declare function evaluateBinding(binding: ValueBinding | undefined, target: AnyRecord, context?: BindingContext): Promise<unknown>;
6
31
  //# sourceMappingURL=bindings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/bindings.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpC,wBAAgB,iCAAiC,IAAI,IAAI,CAKxD;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAoBjE;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAoB5G"}
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/bindings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC/B,wEAAwE;IACxE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClF;AAkBD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAoBjE;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,sBAAsB,CAAC,CA0CjC;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC,CAwClB"}