@researchdatabox/redbox-core 0.0.1-beta.10213 → 0.0.1-beta.10760

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 (287) hide show
  1. package/dist/CoreController.d.ts +8 -0
  2. package/dist/CoreController.d.ts.map +1 -1
  3. package/dist/CoreController.js +87 -52
  4. package/dist/RecordsService.d.ts +2 -0
  5. package/dist/RecordsService.d.ts.map +1 -1
  6. package/dist/SearchService.d.ts +1 -1
  7. package/dist/SearchService.d.ts.map +1 -1
  8. package/dist/StorageService.d.ts +2 -0
  9. package/dist/StorageService.d.ts.map +1 -1
  10. package/dist/api-routes/groups/branding.d.ts +1 -0
  11. package/dist/api-routes/groups/branding.d.ts.map +1 -1
  12. package/dist/api-routes/groups/branding.js +19 -2
  13. package/dist/api-routes/groups/export.js +2 -2
  14. package/dist/api-routes/groups/figshare-crosswalks.d.ts +11 -0
  15. package/dist/api-routes/groups/figshare-crosswalks.d.ts.map +1 -0
  16. package/dist/api-routes/groups/figshare-crosswalks.js +171 -0
  17. package/dist/api-routes/groups/figshare-vocabulary.d.ts +12 -0
  18. package/dist/api-routes/groups/figshare-vocabulary.d.ts.map +1 -0
  19. package/dist/api-routes/groups/figshare-vocabulary.js +248 -0
  20. package/dist/api-routes/groups/search.js +4 -4
  21. package/dist/api-routes/groups/users.js +3 -3
  22. package/dist/api-routes/index.d.ts +2 -0
  23. package/dist/api-routes/index.d.ts.map +1 -1
  24. package/dist/api-routes/index.js +3 -1
  25. package/dist/api-routes/route-registry.d.ts.map +1 -1
  26. package/dist/api-routes/route-registry.js +5 -1
  27. package/dist/api-routes/schemas/common.d.ts +1 -0
  28. package/dist/api-routes/schemas/common.d.ts.map +1 -1
  29. package/dist/api-routes/schemas/common.js +3 -2
  30. package/dist/bootstrap.d.ts.map +1 -1
  31. package/dist/bootstrap.js +5 -1
  32. package/dist/config/agendaQueue.config.d.ts +3 -0
  33. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  34. package/dist/config/agendaQueue.config.js +13 -1
  35. package/dist/config/auth.config.d.ts.map +1 -1
  36. package/dist/config/auth.config.js +4 -1
  37. package/dist/config/brandingConfigurationDefaults.config.d.ts +1 -1
  38. package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
  39. package/dist/config/brandingConfigurationDefaults.config.js +22 -230
  40. package/dist/config/dashboardtype.config.d.ts +7 -0
  41. package/dist/config/dashboardtype.config.d.ts.map +1 -1
  42. package/dist/config/dashboardtype.config.js +9 -89
  43. package/dist/config/dashboardview.config.d.ts +7 -0
  44. package/dist/config/dashboardview.config.d.ts.map +1 -1
  45. package/dist/config/dashboardview.config.js +9 -134
  46. package/dist/config/http.config.d.ts +2 -0
  47. package/dist/config/http.config.d.ts.map +1 -1
  48. package/dist/config/http.config.js +47 -1
  49. package/dist/config/jsonld.config.d.ts.map +1 -1
  50. package/dist/config/jsonld.config.js +2 -21
  51. package/dist/config/record.config.d.ts.map +1 -1
  52. package/dist/config/record.config.js +2 -9
  53. package/dist/config/recordtype.config.d.ts +8 -0
  54. package/dist/config/recordtype.config.d.ts.map +1 -1
  55. package/dist/config/recordtype.config.js +10 -660
  56. package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -1
  57. package/dist/config/reusableContributorFormDefinitions.config.js +1 -2
  58. package/dist/config/reusableViewFormDefinitions.config.d.ts.map +1 -1
  59. package/dist/config/reusableViewFormDefinitions.config.js +12 -1
  60. package/dist/config/routes.config.d.ts.map +1 -1
  61. package/dist/config/routes.config.js +12 -3
  62. package/dist/config/solr.config.d.ts +1 -0
  63. package/dist/config/solr.config.d.ts.map +1 -1
  64. package/dist/config/solr.config.js +3 -2
  65. package/dist/config/static_assets.config.d.ts +2 -0
  66. package/dist/config/static_assets.config.d.ts.map +1 -1
  67. package/dist/config/static_assets.config.js +4 -2
  68. package/dist/config/storage.config.d.ts.map +1 -1
  69. package/dist/config/storage.config.js +7 -1
  70. package/dist/config/views.config.d.ts.map +1 -1
  71. package/dist/config/views.config.js +2 -6
  72. package/dist/config/vocab.config.d.ts +4 -0
  73. package/dist/config/vocab.config.d.ts.map +1 -1
  74. package/dist/config/vocab.config.js +1 -1
  75. package/dist/config/workflow.config.d.ts +7 -0
  76. package/dist/config/workflow.config.d.ts.map +1 -1
  77. package/dist/config/workflow.config.js +9 -194
  78. package/dist/config/workspacetype.config.d.ts +7 -0
  79. package/dist/config/workspacetype.config.d.ts.map +1 -1
  80. package/dist/config/workspacetype.config.js +9 -10
  81. package/dist/configmodels/DoiPublishing.d.ts +1 -1
  82. package/dist/configmodels/DoiPublishing.d.ts.map +1 -1
  83. package/dist/configmodels/FigsharePublishing.d.ts +746 -217
  84. package/dist/configmodels/FigsharePublishing.d.ts.map +1 -1
  85. package/dist/configmodels/FigsharePublishing.js +181 -190
  86. package/dist/constants/export.d.ts +2 -0
  87. package/dist/constants/export.d.ts.map +1 -0
  88. package/dist/constants/export.js +8 -0
  89. package/dist/controllers/AsynchController.d.ts +4 -1
  90. package/dist/controllers/AsynchController.d.ts.map +1 -1
  91. package/dist/controllers/AsynchController.js +118 -9
  92. package/dist/controllers/BrandingAppController.d.ts +2 -0
  93. package/dist/controllers/BrandingAppController.d.ts.map +1 -1
  94. package/dist/controllers/BrandingAppController.js +40 -2
  95. package/dist/controllers/BrandingController.d.ts +8 -0
  96. package/dist/controllers/BrandingController.d.ts.map +1 -1
  97. package/dist/controllers/BrandingController.js +45 -1
  98. package/dist/controllers/ExportController.d.ts.map +1 -1
  99. package/dist/controllers/ExportController.js +4 -3
  100. package/dist/controllers/RecordController.d.ts +1 -1
  101. package/dist/controllers/RecordController.d.ts.map +1 -1
  102. package/dist/controllers/RecordController.js +47 -21
  103. package/dist/controllers/UserController.d.ts.map +1 -1
  104. package/dist/controllers/UserController.js +3 -2
  105. package/dist/controllers/VocabularyController.js +4 -4
  106. package/dist/controllers/index.d.ts.map +1 -1
  107. package/dist/controllers/index.js +7 -1
  108. package/dist/controllers/webservice/BrandingController.d.ts +1 -0
  109. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  110. package/dist/controllers/webservice/BrandingController.js +69 -10
  111. package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
  112. package/dist/controllers/webservice/ExportController.js +4 -3
  113. package/dist/controllers/webservice/FigshareCrosswalkController.d.ts +20 -0
  114. package/dist/controllers/webservice/FigshareCrosswalkController.d.ts.map +1 -0
  115. package/dist/controllers/webservice/FigshareCrosswalkController.js +184 -0
  116. package/dist/controllers/webservice/FigshareVocabularyController.d.ts +21 -0
  117. package/dist/controllers/webservice/FigshareVocabularyController.d.ts.map +1 -0
  118. package/dist/controllers/webservice/FigshareVocabularyController.js +223 -0
  119. package/dist/controllers/webservice/RecordController.d.ts +2 -0
  120. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  121. package/dist/controllers/webservice/RecordController.js +60 -12
  122. package/dist/controllers/webservice/UserManagementController.d.ts +5 -3
  123. package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
  124. package/dist/controllers/webservice/UserManagementController.js +140 -9
  125. package/dist/controllers/webservice/figshare-vocabulary-errors.d.ts +14 -0
  126. package/dist/controllers/webservice/figshare-vocabulary-errors.d.ts.map +1 -0
  127. package/dist/controllers/webservice/figshare-vocabulary-errors.js +39 -0
  128. package/dist/form-config/index.d.ts +7 -0
  129. package/dist/form-config/index.d.ts.map +1 -1
  130. package/dist/form-config/index.js +8 -5
  131. package/dist/hooks/hookDiscovery.d.ts +20 -0
  132. package/dist/hooks/hookDiscovery.d.ts.map +1 -0
  133. package/dist/hooks/hookDiscovery.js +186 -0
  134. package/dist/hooks/hookResources.d.ts +23 -0
  135. package/dist/hooks/hookResources.d.ts.map +1 -0
  136. package/dist/hooks/hookResources.js +136 -0
  137. package/dist/hooks/index.d.ts +4 -0
  138. package/dist/hooks/index.d.ts.map +1 -1
  139. package/dist/hooks/index.js +14 -2
  140. package/dist/index.d.ts +4 -0
  141. package/dist/index.d.ts.map +1 -1
  142. package/dist/index.js +14 -2
  143. package/dist/loader/index.d.ts.map +1 -1
  144. package/dist/loader/index.js +21 -62
  145. package/dist/model/storage/BrandingModel.d.ts +2 -0
  146. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  147. package/dist/model/storage/BrandingModel.js +3 -1
  148. package/dist/services/AgendaQueueService.d.ts.map +1 -1
  149. package/dist/services/AgendaQueueService.js +6 -2
  150. package/dist/services/BrandingLogoService.d.ts +20 -1
  151. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  152. package/dist/services/BrandingLogoService.js +51 -5
  153. package/dist/services/BrandingThemeTokens.d.ts.map +1 -1
  154. package/dist/services/BrandingThemeTokens.js +2 -1
  155. package/dist/services/EmailService.d.ts +2 -8
  156. package/dist/services/EmailService.d.ts.map +1 -1
  157. package/dist/services/EmailService.js +8 -26
  158. package/dist/services/FigshareService.d.ts.map +1 -1
  159. package/dist/services/FigshareService.js +5 -4
  160. package/dist/services/FigshareVocabularyService.d.ts +442 -0
  161. package/dist/services/FigshareVocabularyService.d.ts.map +1 -0
  162. package/dist/services/FigshareVocabularyService.js +1802 -0
  163. package/dist/services/FormVocabularyService.d.ts.map +1 -1
  164. package/dist/services/FormVocabularyService.js +28 -7
  165. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  166. package/dist/services/I18nEntriesService.js +21 -2
  167. package/dist/services/IntegrationAuditService.js +4 -4
  168. package/dist/services/NamedQueryService.d.ts.map +1 -1
  169. package/dist/services/NamedQueryService.js +3 -16
  170. package/dist/services/RDMPService.d.ts.map +1 -1
  171. package/dist/services/RDMPService.js +9 -1
  172. package/dist/services/RecordsService.d.ts +4 -0
  173. package/dist/services/RecordsService.d.ts.map +1 -1
  174. package/dist/services/RecordsService.js +62 -45
  175. package/dist/services/ReportsService.d.ts +0 -5
  176. package/dist/services/ReportsService.d.ts.map +1 -1
  177. package/dist/services/ReportsService.js +22 -31
  178. package/dist/services/SolrSearchService.d.ts +10 -2
  179. package/dist/services/SolrSearchService.d.ts.map +1 -1
  180. package/dist/services/SolrSearchService.js +110 -52
  181. package/dist/services/StandardDatastreamService.d.ts +7 -0
  182. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  183. package/dist/services/StandardDatastreamService.js +127 -27
  184. package/dist/services/TemplateService.d.ts +0 -14
  185. package/dist/services/TemplateService.d.ts.map +1 -1
  186. package/dist/services/TemplateService.js +4 -45
  187. package/dist/services/UsersService.d.ts.map +1 -1
  188. package/dist/services/UsersService.js +19 -16
  189. package/dist/services/ViewUtilsService.d.ts +5 -1
  190. package/dist/services/ViewUtilsService.d.ts.map +1 -1
  191. package/dist/services/ViewUtilsService.js +38 -46
  192. package/dist/services/VocabularyService.d.ts +11 -2
  193. package/dist/services/VocabularyService.d.ts.map +1 -1
  194. package/dist/services/VocabularyService.js +46 -20
  195. package/dist/services/doi-v2/bindings.d.ts.map +1 -1
  196. package/dist/services/doi-v2/bindings.js +2 -11
  197. package/dist/services/figshare-v2/assets.d.ts +2 -1
  198. package/dist/services/figshare-v2/assets.d.ts.map +1 -1
  199. package/dist/services/figshare-v2/assets.js +144 -89
  200. package/dist/services/figshare-v2/bindings.d.ts +28 -3
  201. package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
  202. package/dist/services/figshare-v2/bindings.js +75 -17
  203. package/dist/services/figshare-v2/categories.d.ts +142 -0
  204. package/dist/services/figshare-v2/categories.d.ts.map +1 -0
  205. package/dist/services/figshare-v2/categories.js +408 -0
  206. package/dist/services/figshare-v2/config.d.ts +10 -0
  207. package/dist/services/figshare-v2/config.d.ts.map +1 -1
  208. package/dist/services/figshare-v2/config.js +39 -1
  209. package/dist/services/figshare-v2/context.d.ts +18 -1
  210. package/dist/services/figshare-v2/context.d.ts.map +1 -1
  211. package/dist/services/figshare-v2/context.js +34 -2
  212. package/dist/services/figshare-v2/embargo.d.ts.map +1 -1
  213. package/dist/services/figshare-v2/embargo.js +6 -4
  214. package/dist/services/figshare-v2/http.d.ts +3 -1
  215. package/dist/services/figshare-v2/http.d.ts.map +1 -1
  216. package/dist/services/figshare-v2/http.js +26 -4
  217. package/dist/services/figshare-v2/metadata.d.ts.map +1 -1
  218. package/dist/services/figshare-v2/metadata.js +74 -26
  219. package/dist/services/figshare-v2/observability.d.ts +1 -2
  220. package/dist/services/figshare-v2/observability.d.ts.map +1 -1
  221. package/dist/services/figshare-v2/observability.js +7 -47
  222. package/dist/services/figshare-v2/types.d.ts +13 -0
  223. package/dist/services/figshare-v2/types.d.ts.map +1 -1
  224. package/dist/services/figshare-v2/types.js +1 -1
  225. package/dist/services/figshare-v2/vocabulary-errors.d.ts +39 -0
  226. package/dist/services/figshare-v2/vocabulary-errors.d.ts.map +1 -0
  227. package/dist/services/figshare-v2/vocabulary-errors.js +68 -0
  228. package/dist/services/index.d.ts +3 -0
  229. package/dist/services/index.d.ts.map +1 -1
  230. package/dist/services/index.js +8 -3
  231. package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -1
  232. package/dist/storage/TusStorageManagerDataStore.js +14 -1
  233. package/dist/utilities/ContextVariableUtils.d.ts +3 -1
  234. package/dist/utilities/ContextVariableUtils.d.ts.map +1 -1
  235. package/dist/utilities/ContextVariableUtils.js +25 -7
  236. package/dist/utilities/PromiseUtils.d.ts +9 -0
  237. package/dist/utilities/PromiseUtils.d.ts.map +1 -0
  238. package/dist/utilities/PromiseUtils.js +27 -0
  239. package/dist/utilities/RedactionUtils.d.ts +3 -0
  240. package/dist/utilities/RedactionUtils.d.ts.map +1 -0
  241. package/dist/utilities/RedactionUtils.js +55 -0
  242. package/dist/visitor/client.visitor.d.ts +3 -0
  243. package/dist/visitor/client.visitor.d.ts.map +1 -1
  244. package/dist/visitor/client.visitor.js +102 -17
  245. package/dist/visitor/construct.visitor.d.ts +3 -0
  246. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  247. package/dist/visitor/construct.visitor.js +51 -38
  248. package/dist/visitor/json-type-def.visitor.d.ts +1 -0
  249. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  250. package/dist/visitor/json-type-def.visitor.js +20 -4
  251. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +6 -3
  252. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  253. package/dist/visitor/migrate-config-v4-v5.visitor.js +94 -44
  254. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  255. package/dist/visitor/validator.visitor.js +1 -1
  256. package/dist/visitor/visitor-helpers.js +2 -2
  257. package/dist/waterline-models/BrandingConfig.d.ts +2 -0
  258. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  259. package/dist/waterline-models/BrandingConfig.js +6 -1
  260. package/dist/waterline-models/FigshareVocabularyCategory.d.ts +38 -0
  261. package/dist/waterline-models/FigshareVocabularyCategory.d.ts.map +1 -0
  262. package/dist/waterline-models/FigshareVocabularyCategory.js +157 -0
  263. package/dist/waterline-models/FigshareVocabularyCrosswalk.d.ts +37 -0
  264. package/dist/waterline-models/FigshareVocabularyCrosswalk.d.ts.map +1 -0
  265. package/dist/waterline-models/FigshareVocabularyCrosswalk.js +153 -0
  266. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.d.ts +37 -0
  267. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.d.ts.map +1 -0
  268. package/dist/waterline-models/FigshareVocabularyCrosswalkMapping.js +138 -0
  269. package/dist/waterline-models/FigshareVocabularySource.d.ts +45 -0
  270. package/dist/waterline-models/FigshareVocabularySource.d.ts.map +1 -0
  271. package/dist/waterline-models/FigshareVocabularySource.js +149 -0
  272. package/dist/waterline-models/FigshareVocabularySyncRun.d.ts +70 -0
  273. package/dist/waterline-models/FigshareVocabularySyncRun.d.ts.map +1 -0
  274. package/dist/waterline-models/FigshareVocabularySyncRun.js +237 -0
  275. package/dist/waterline-models/Vocabulary.d.ts +3 -1
  276. package/dist/waterline-models/Vocabulary.d.ts.map +1 -1
  277. package/dist/waterline-models/Vocabulary.js +9 -3
  278. package/dist/waterline-models/index.d.ts +10 -0
  279. package/dist/waterline-models/index.d.ts.map +1 -1
  280. package/dist/waterline-models/index.js +16 -1
  281. package/package.json +19 -19
  282. package/dist/form-config/dataRecord-1.0-draft.d.ts +0 -4
  283. package/dist/form-config/dataRecord-1.0-draft.d.ts.map +0 -1
  284. package/dist/form-config/dataRecord-1.0-draft.js +0 -1042
  285. package/dist/form-config/default-1.0-draft.d.ts +0 -4
  286. package/dist/form-config/default-1.0-draft.d.ts.map +0 -1
  287. package/dist/form-config/default-1.0-draft.js +0 -1156
@@ -0,0 +1,408 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FIGSHARE_SNAPSHOT_LIMITS = exports.FIGSHARE_NORMALIZER_VERSION = void 0;
4
+ exports.normalizeCategoryCode = normalizeCategoryCode;
5
+ exports.toSourceCodeCandidates = toSourceCodeCandidates;
6
+ exports.normalizeLabel = normalizeLabel;
7
+ exports.normalizeFigshareCategories = normalizeFigshareCategories;
8
+ exports.groupTaxonomies = groupTaxonomies;
9
+ exports.filterByTaxonomy = filterByTaxonomy;
10
+ exports.hashSnapshot = hashSnapshot;
11
+ exports.assertSnapshotWithinLimits = assertSnapshotWithinLimits;
12
+ exports.classifyChanges = classifyChanges;
13
+ exports.buildProposals = buildProposals;
14
+ exports.buildIdentityProposals = buildIdentityProposals;
15
+ const node_crypto_1 = require("node:crypto");
16
+ const vocabulary_errors_1 = require("./vocabulary-errors");
17
+ /**
18
+ * Bumped whenever normalisation or proposal rules change so that stored sync runs
19
+ * remain reproducible and comparable.
20
+ */
21
+ exports.FIGSHARE_NORMALIZER_VERSION = '1';
22
+ /** Guard rails that keep a preview inside Mongo's document size limit. */
23
+ exports.FIGSHARE_SNAPSHOT_LIMITS = {
24
+ maxCategories: 20000,
25
+ maxSnapshotBytes: 8 * 1024 * 1024
26
+ };
27
+ /**
28
+ * Trim, drop any query string and keep the final URI/hash segment so that
29
+ * `http://purl.org/au-research/vocabulary/anzsrc-for/2020/300101` and `300101`
30
+ * compare equal.
31
+ */
32
+ function normalizeCategoryCode(value) {
33
+ const rawValue = String(value ?? '').trim();
34
+ if (rawValue === '') {
35
+ return '';
36
+ }
37
+ const withoutQuery = rawValue.split('?')[0] ?? rawValue;
38
+ const delimiterIndex = Math.max(withoutQuery.lastIndexOf('/'), withoutQuery.lastIndexOf('#'));
39
+ const segment = delimiterIndex === -1 ? withoutQuery : withoutQuery.slice(delimiterIndex + 1);
40
+ return segment.trim().toLowerCase();
41
+ }
42
+ /**
43
+ * Coerce the result of a categories binding into candidate code strings: arrays are
44
+ * flattened, and object entries are reduced through their `notation` or `code` field.
45
+ * No normalisation is applied — callers pick the normaliser that suits their matcher.
46
+ */
47
+ function toSourceCodeCandidates(value) {
48
+ const items = Array.isArray(value) ? value : value != null && value !== '' ? [value] : [];
49
+ return items
50
+ .filter(Boolean)
51
+ .map((item) => {
52
+ if (typeof item === 'object' && item != null) {
53
+ const record = item;
54
+ return String(record.notation ?? record.code ?? '');
55
+ }
56
+ return String(item);
57
+ })
58
+ .map((code) => code.trim())
59
+ .filter((code) => code !== '');
60
+ }
61
+ /** Collapse internal whitespace and normalise Unicode so labels compare stably. */
62
+ function normalizeLabel(value) {
63
+ return String(value ?? '').normalize('NFC').replace(/\s+/g, ' ').trim();
64
+ }
65
+ function sha256(value) {
66
+ return `sha256:${(0, node_crypto_1.createHash)('sha256').update(value, 'utf8').digest('hex')}`;
67
+ }
68
+ function canonicalRow(row) {
69
+ return JSON.stringify([
70
+ row.sourceId,
71
+ row.categoryId,
72
+ row.taxonomyId,
73
+ row.title,
74
+ row.parentSourceId,
75
+ row.path,
76
+ row.selectable,
77
+ row.hasChildren
78
+ ]);
79
+ }
80
+ function toPositiveInteger(value) {
81
+ const parsed = Number(value);
82
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : null;
83
+ }
84
+ /**
85
+ * Validate and canonicalise a raw Figshare category response.
86
+ *
87
+ * Identity is the Figshare `source_id` when present (Q-01: prefer the taxonomy code,
88
+ * keep the numeric id as the mutable publishing relationship), falling back to the
89
+ * numeric id for catalogues that omit it.
90
+ */
91
+ function normalizeFigshareCategories(raw) {
92
+ if (!Array.isArray(raw)) {
93
+ throw new vocabulary_errors_1.CatalogueInvalidError('Figshare returned a category catalogue that is not an array');
94
+ }
95
+ if (raw.length > exports.FIGSHARE_SNAPSHOT_LIMITS.maxCategories) {
96
+ throw new vocabulary_errors_1.SnapshotTooLargeError(`Figshare returned ${raw.length} categories which exceeds the supported maximum of ${exports.FIGSHARE_SNAPSHOT_LIMITS.maxCategories}`);
97
+ }
98
+ const staged = [];
99
+ const byCategoryId = new Map();
100
+ const seenSourceIds = new Set();
101
+ for (const entry of raw) {
102
+ if (entry == null || typeof entry !== 'object' || Array.isArray(entry)) {
103
+ throw new vocabulary_errors_1.CatalogueInvalidError('Figshare category catalogue contains a non-object entry');
104
+ }
105
+ const category = entry;
106
+ const categoryId = toPositiveInteger(category.id);
107
+ if (categoryId == null) {
108
+ throw new vocabulary_errors_1.CatalogueInvalidError('Figshare category is missing a positive numeric id');
109
+ }
110
+ const title = normalizeLabel(category.title);
111
+ if (title === '') {
112
+ throw new vocabulary_errors_1.CatalogueInvalidError(`Figshare category ${categoryId} is missing a title`);
113
+ }
114
+ const sourceId = String(category.source_id ?? '').trim() || String(categoryId);
115
+ if (seenSourceIds.has(sourceId)) {
116
+ throw new vocabulary_errors_1.CatalogueInvalidError(`Figshare category catalogue contains a duplicate source_id '${sourceId}'`);
117
+ }
118
+ if (byCategoryId.has(categoryId)) {
119
+ throw new vocabulary_errors_1.CatalogueInvalidError(`Figshare category catalogue contains a duplicate id '${categoryId}'`);
120
+ }
121
+ seenSourceIds.add(sourceId);
122
+ const stagedCategory = {
123
+ sourceId,
124
+ categoryId,
125
+ taxonomyId: String(toPositiveInteger(category.taxonomy_id) ?? ''),
126
+ title,
127
+ rawParentId: toPositiveInteger(category.parent_id),
128
+ selectable: category.is_selectable !== false,
129
+ hasChildren: category.has_children === true
130
+ };
131
+ staged.push(stagedCategory);
132
+ byCategoryId.set(categoryId, stagedCategory);
133
+ }
134
+ const warnings = [];
135
+ const parentBySourceId = new Map();
136
+ for (const category of staged) {
137
+ if (category.rawParentId == null) {
138
+ parentBySourceId.set(category.sourceId, null);
139
+ continue;
140
+ }
141
+ const parent = byCategoryId.get(category.rawParentId);
142
+ if (!parent) {
143
+ // Public catalogue responses can omit ancestors; promote to a root and say so.
144
+ warnings.push({
145
+ code: 'missing-parent',
146
+ sourceId: category.sourceId,
147
+ detail: `Parent category ${category.rawParentId} is not present in this catalogue; the term is promoted to a root`
148
+ });
149
+ parentBySourceId.set(category.sourceId, null);
150
+ continue;
151
+ }
152
+ parentBySourceId.set(category.sourceId, parent.sourceId);
153
+ }
154
+ const stagedBySourceId = new Map(staged.map((category) => [category.sourceId, category]));
155
+ const buildPath = (category) => {
156
+ const path = [category.sourceId];
157
+ const seen = new Set([category.sourceId]);
158
+ let cursorSourceId = parentBySourceId.get(category.sourceId) ?? null;
159
+ while (cursorSourceId != null) {
160
+ if (seen.has(cursorSourceId)) {
161
+ warnings.push({
162
+ code: 'cycle-detected',
163
+ sourceId: category.sourceId,
164
+ detail: `Ancestor cycle detected at '${cursorSourceId}'; the remaining ancestors are omitted`
165
+ });
166
+ break;
167
+ }
168
+ seen.add(cursorSourceId);
169
+ path.unshift(cursorSourceId);
170
+ cursorSourceId = parentBySourceId.get(cursorSourceId) ?? null;
171
+ }
172
+ return path;
173
+ };
174
+ const resolveTaxonomyId = (category) => {
175
+ if (category.taxonomyId !== '') {
176
+ return category.taxonomyId;
177
+ }
178
+ // Catalogues without taxonomy_id are grouped by their root ancestor instead.
179
+ const path = buildPath(category);
180
+ const rootSourceId = path[0] ?? category.sourceId;
181
+ const root = stagedBySourceId.get(rootSourceId);
182
+ if (root != null && root.taxonomyId !== '') {
183
+ return root.taxonomyId;
184
+ }
185
+ warnings.push({
186
+ code: 'missing-taxonomy',
187
+ sourceId: category.sourceId,
188
+ detail: `Figshare did not supply taxonomy_id; grouped under root term '${rootSourceId}'`
189
+ });
190
+ return `root:${rootSourceId}`;
191
+ };
192
+ const rows = staged.map((category) => {
193
+ const base = {
194
+ sourceId: category.sourceId,
195
+ categoryId: category.categoryId,
196
+ taxonomyId: resolveTaxonomyId(category),
197
+ title: category.title,
198
+ parentSourceId: parentBySourceId.get(category.sourceId) ?? null,
199
+ path: buildPath(category),
200
+ selectable: category.selectable,
201
+ hasChildren: category.hasChildren
202
+ };
203
+ return { ...base, contentHash: sha256(canonicalRow(base)) };
204
+ });
205
+ rows.sort((left, right) => left.sourceId.localeCompare(right.sourceId));
206
+ return { rows, warnings };
207
+ }
208
+ /** Group a normalized catalogue into the taxonomies an administrator can select. */
209
+ function groupTaxonomies(result) {
210
+ const missingParentSourceIds = new Set(result.warnings.filter((warning) => warning.code === 'missing-parent').map((warning) => warning.sourceId));
211
+ const summaries = new Map();
212
+ for (const row of result.rows) {
213
+ const summary = summaries.get(row.taxonomyId) ?? {
214
+ taxonomyId: row.taxonomyId,
215
+ title: `Taxonomy ${row.taxonomyId}`,
216
+ categoryCount: 0,
217
+ selectableCount: 0,
218
+ missingParentCount: 0
219
+ };
220
+ summary.categoryCount += 1;
221
+ if (row.selectable) {
222
+ summary.selectableCount += 1;
223
+ }
224
+ if (missingParentSourceIds.has(row.sourceId)) {
225
+ summary.missingParentCount += 1;
226
+ }
227
+ summaries.set(row.taxonomyId, summary);
228
+ }
229
+ return Array.from(summaries.values()).sort((left, right) => left.taxonomyId.localeCompare(right.taxonomyId));
230
+ }
231
+ /** Restrict a normalized catalogue to a single taxonomy. */
232
+ function filterByTaxonomy(result, taxonomyId) {
233
+ const normalizedTaxonomyId = String(taxonomyId ?? '').trim();
234
+ const rows = result.rows.filter((row) => row.taxonomyId === normalizedTaxonomyId);
235
+ const retained = new Set(rows.map((row) => row.sourceId));
236
+ return {
237
+ rows,
238
+ warnings: result.warnings.filter((warning) => retained.has(warning.sourceId))
239
+ };
240
+ }
241
+ /**
242
+ * Serialise the canonical ordered row set and hash it. The same Figshare content
243
+ * always produces the same hash.
244
+ */
245
+ function hashSnapshot(rows) {
246
+ const ordered = [...rows].sort((left, right) => left.sourceId.localeCompare(right.sourceId));
247
+ const serialized = JSON.stringify(ordered.map((row) => row.contentHash));
248
+ return sha256(serialized);
249
+ }
250
+ /** Reject an over-limit snapshot before any database write. */
251
+ function assertSnapshotWithinLimits(rows) {
252
+ if (rows.length > exports.FIGSHARE_SNAPSHOT_LIMITS.maxCategories) {
253
+ throw new vocabulary_errors_1.SnapshotTooLargeError(`The selected taxonomy contains ${rows.length} categories which exceeds the supported maximum of ${exports.FIGSHARE_SNAPSHOT_LIMITS.maxCategories}`);
254
+ }
255
+ const byteLength = Buffer.byteLength(JSON.stringify(rows), 'utf8');
256
+ if (byteLength > exports.FIGSHARE_SNAPSHOT_LIMITS.maxSnapshotBytes) {
257
+ throw new vocabulary_errors_1.SnapshotTooLargeError(`The normalized snapshot is ${byteLength} bytes which exceeds the supported maximum of ${exports.FIGSHARE_SNAPSHOT_LIMITS.maxSnapshotBytes}`);
258
+ }
259
+ }
260
+ /** Classify remote changes against the currently mirrored categories. */
261
+ function classifyChanges(existing, snapshot) {
262
+ const existingBySourceId = new Map(existing.map((row) => [row.sourceId, row]));
263
+ const remoteBySourceId = new Map(snapshot.map((row) => [row.sourceId, row]));
264
+ const rows = [];
265
+ const summary = { added: 0, changed: 0, removed: 0, reappeared: 0, unchanged: 0 };
266
+ for (const remote of snapshot) {
267
+ const local = existingBySourceId.get(remote.sourceId);
268
+ if (!local) {
269
+ rows.push({ changeClass: 'added', sourceId: remote.sourceId, title: remote.title, categoryId: remote.categoryId });
270
+ summary.added += 1;
271
+ continue;
272
+ }
273
+ if (local.historical) {
274
+ rows.push({
275
+ changeClass: 'reappeared',
276
+ sourceId: remote.sourceId,
277
+ title: remote.title,
278
+ categoryId: remote.categoryId,
279
+ previousCategoryId: local.categoryId,
280
+ previousTitle: local.title
281
+ });
282
+ summary.reappeared += 1;
283
+ continue;
284
+ }
285
+ if (local.contentHash !== remote.contentHash) {
286
+ rows.push({
287
+ changeClass: 'changed',
288
+ sourceId: remote.sourceId,
289
+ title: remote.title,
290
+ categoryId: remote.categoryId,
291
+ previousCategoryId: local.categoryId,
292
+ previousTitle: local.title
293
+ });
294
+ summary.changed += 1;
295
+ continue;
296
+ }
297
+ rows.push({ changeClass: 'unchanged', sourceId: remote.sourceId, title: remote.title, categoryId: remote.categoryId });
298
+ summary.unchanged += 1;
299
+ }
300
+ for (const local of existing) {
301
+ if (remoteBySourceId.has(local.sourceId) || local.historical) {
302
+ continue;
303
+ }
304
+ rows.push({
305
+ changeClass: 'removed',
306
+ sourceId: local.sourceId,
307
+ title: local.title,
308
+ previousCategoryId: local.categoryId,
309
+ previousTitle: local.title
310
+ });
311
+ summary.removed += 1;
312
+ }
313
+ rows.sort((left, right) => left.sourceId.localeCompare(right.sourceId));
314
+ return { rows, summary };
315
+ }
316
+ /**
317
+ * Deterministic proposal rules. Exact code and identity matches are preselected;
318
+ * a unique exact label match is offered but never preselected; anything ambiguous
319
+ * stays unresolved. No fuzzy matching is performed.
320
+ */
321
+ function buildProposals(localEntries, snapshot, options = {}) {
322
+ const historicalSourceIds = options.historicalSourceIds ?? new Set();
323
+ const byCode = new Map();
324
+ const byLabel = new Map();
325
+ for (const row of snapshot) {
326
+ const code = normalizeCategoryCode(row.sourceId);
327
+ if (code !== '') {
328
+ byCode.set(code, [...(byCode.get(code) ?? []), row]);
329
+ }
330
+ const label = row.title.toLowerCase();
331
+ byLabel.set(label, [...(byLabel.get(label) ?? []), row]);
332
+ }
333
+ const proposals = [];
334
+ const unresolvedLocalEntryIds = [];
335
+ const pushProposal = (entry, target, matchType, preselected, evidence) => {
336
+ proposals.push({
337
+ proposalId: `${entry.id}:${target.sourceId}`,
338
+ localEntryId: entry.id,
339
+ localLabel: entry.label,
340
+ localValue: entry.value,
341
+ localIdentifier: entry.identifier,
342
+ targetSourceId: target.sourceId,
343
+ targetCategoryId: target.categoryId,
344
+ targetTitle: target.title,
345
+ matchType,
346
+ preselected,
347
+ historical: historicalSourceIds.has(target.sourceId),
348
+ evidence: { ...evidence, normalizerVersion: exports.FIGSHARE_NORMALIZER_VERSION }
349
+ });
350
+ };
351
+ for (const entry of localEntries) {
352
+ const normalizedValue = normalizeCategoryCode(entry.value);
353
+ const exactCodeMatches = normalizedValue === '' ? [] : (byCode.get(normalizedValue) ?? []);
354
+ if (exactCodeMatches.length > 0) {
355
+ for (const target of exactCodeMatches) {
356
+ pushProposal(entry, target, 'exact-code', true, { rule: 'exact-code', normalizedValue });
357
+ }
358
+ continue;
359
+ }
360
+ const normalizedIdentifier = normalizeCategoryCode(entry.identifier);
361
+ const identityMatches = normalizedIdentifier === '' ? [] : (byCode.get(normalizedIdentifier) ?? []);
362
+ if (identityMatches.length > 0) {
363
+ for (const target of identityMatches) {
364
+ pushProposal(entry, target, 'identity', true, { rule: 'identity', normalizedIdentifier });
365
+ }
366
+ continue;
367
+ }
368
+ const labelMatches = byLabel.get(normalizeLabel(entry.label).toLowerCase()) ?? [];
369
+ if (labelMatches.length === 1) {
370
+ pushProposal(entry, labelMatches[0], 'label-suggestion', false, {
371
+ rule: 'exact-label',
372
+ normalizedLabel: normalizeLabel(entry.label)
373
+ });
374
+ continue;
375
+ }
376
+ unresolvedLocalEntryIds.push(entry.id);
377
+ }
378
+ return { proposals, unresolvedLocalEntryIds };
379
+ }
380
+ /** Identity proposals for a freshly created clone: every entry maps to its own source term. */
381
+ function buildIdentityProposals(clonedEntries, snapshot) {
382
+ const bySourceId = new Map(snapshot.map((row) => [row.sourceId, row]));
383
+ const proposals = [];
384
+ const unresolvedLocalEntryIds = [];
385
+ for (const entry of clonedEntries) {
386
+ const target = bySourceId.get(entry.sourceId);
387
+ if (!target) {
388
+ unresolvedLocalEntryIds.push(entry.id);
389
+ continue;
390
+ }
391
+ proposals.push({
392
+ proposalId: `${entry.id}:${target.sourceId}`,
393
+ localEntryId: entry.id,
394
+ localLabel: entry.label,
395
+ localValue: entry.value,
396
+ localIdentifier: entry.identifier,
397
+ targetSourceId: target.sourceId,
398
+ targetCategoryId: target.categoryId,
399
+ targetTitle: target.title,
400
+ matchType: 'identity',
401
+ preselected: true,
402
+ historical: false,
403
+ evidence: { rule: 'clone-identity', normalizerVersion: exports.FIGSHARE_NORMALIZER_VERSION }
404
+ });
405
+ }
406
+ return { proposals, unresolvedLocalEntryIds };
407
+ }
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9jYXRlZ29yaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNIQSxzREFTQztBQU9ELHdEQWFDO0FBR0Qsd0NBRUM7QUErQkQsa0VBMklDO0FBR0QsMENBMkJDO0FBR0QsNENBV0M7QUFNRCxvQ0FJQztBQUdELGdFQVlDO0FBR0QsMENBNERDO0FBT0Qsd0NBNEVDO0FBR0Qsd0RBK0JDO0FBM2pCRCw2Q0FBeUM7QUFFekMsMkRBQW1GO0FBRW5GOzs7R0FHRztBQUNVLFFBQUEsMkJBQTJCLEdBQUcsR0FBRyxDQUFDO0FBRS9DLDBFQUEwRTtBQUM3RCxRQUFBLHdCQUF3QixHQUFHO0lBQ3RDLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLGdCQUFnQixFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtDQUN6QixDQUFDO0FBbUdYOzs7O0dBSUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxLQUFjO0lBQ2xELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUMsSUFBSSxRQUFRLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDcEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUM7SUFDeEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RixNQUFNLE9BQU8sR0FBRyxjQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUYsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdEMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxLQUFjO0lBQ25ELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUYsT0FBTyxLQUFLO1NBQ1QsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLEdBQUcsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFO1FBQ3JCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUErQixDQUFDO1lBQy9DLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO1NBQ0QsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixTQUFnQixjQUFjLENBQUMsS0FBYztJQUMzQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUUsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQWE7SUFDM0IsT0FBTyxVQUFVLElBQUEsd0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUFvRDtJQUN4RSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEIsR0FBRyxDQUFDLFFBQVE7UUFDWixHQUFHLENBQUMsVUFBVTtRQUNkLEdBQUcsQ0FBQyxVQUFVO1FBQ2QsR0FBRyxDQUFDLEtBQUs7UUFDVCxHQUFHLENBQUMsY0FBYztRQUNsQixHQUFHLENBQUMsSUFBSTtRQUNSLEdBQUcsQ0FBQyxVQUFVO1FBQ2QsR0FBRyxDQUFDLFdBQVc7S0FDaEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2hFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxHQUFZO0lBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLHlDQUFxQixDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxnQ0FBd0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUkseUNBQXFCLENBQzdCLHFCQUFxQixHQUFHLENBQUMsTUFBTSxzREFBc0QsZ0NBQXdCLENBQUMsYUFBYSxFQUFFLENBQzlILENBQUM7SUFDSixDQUFDO0lBWUQsTUFBTSxNQUFNLEdBQXFCLEVBQUUsQ0FBQztJQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRXhDLEtBQUssTUFBTSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkUsTUFBTSxJQUFJLHlDQUFxQixDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLEtBQXlCLENBQUM7UUFDM0MsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSx5Q0FBcUIsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSx5Q0FBcUIsQ0FBQyxxQkFBcUIsVUFBVSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0UsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLHlDQUFxQixDQUFDLCtEQUErRCxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzlHLENBQUM7UUFDRCxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUkseUNBQXFCLENBQUMsd0RBQXdELFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsTUFBTSxjQUFjLEdBQW1CO1lBQ3JDLFFBQVE7WUFDUixVQUFVO1lBQ1YsVUFBVSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pFLEtBQUs7WUFDTCxXQUFXLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUNsRCxVQUFVLEVBQUUsUUFBUSxDQUFDLGFBQWEsS0FBSyxLQUFLO1lBQzVDLFdBQVcsRUFBRSxRQUFRLENBQUMsWUFBWSxLQUFLLElBQUk7U0FDNUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFtQyxFQUFFLENBQUM7SUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUUxRCxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlCLElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QyxTQUFTO1FBQ1gsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLCtFQUErRTtZQUMvRSxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsTUFBTSxFQUFFLG1CQUFtQixRQUFRLENBQUMsV0FBVyxtRUFBbUU7YUFDbkgsQ0FBQyxDQUFDO1lBQ0gsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUMsU0FBUztRQUNYLENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUxRixNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQXdCLEVBQVksRUFBRTtRQUN2RCxNQUFNLElBQUksR0FBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksY0FBYyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3JFLE9BQU8sY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDM0IsTUFBTSxFQUFFLCtCQUErQixjQUFjLHdDQUF3QztpQkFDOUYsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzdCLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUF3QixFQUFVLEVBQUU7UUFDN0QsSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQy9CLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsNkVBQTZFO1FBQzdFLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDM0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ1osSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsTUFBTSxFQUFFLGlFQUFpRSxZQUFZLEdBQUc7U0FDekYsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLFlBQVksRUFBRSxDQUFDO0lBQ2hDLENBQUMsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFpQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDakUsTUFBTSxJQUFJLEdBQUc7WUFDWCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDdkMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUk7WUFDL0QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDekIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztTQUNsQyxDQUFDO1FBQ0YsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxvRkFBb0Y7QUFDcEYsU0FBZ0IsZUFBZSxDQUM3QixNQUFtQztJQUVuQyxNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUMxRyxDQUFDO0lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7SUFFN0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUk7WUFDL0MsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO1lBQzFCLEtBQUssRUFBRSxZQUFZLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDbkMsYUFBYSxFQUFFLENBQUM7WUFDaEIsZUFBZSxFQUFFLENBQUM7WUFDbEIsa0JBQWtCLEVBQUUsQ0FBQztTQUN0QixDQUFDO1FBQ0YsT0FBTyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQy9HLENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBZ0IsZ0JBQWdCLENBQzlCLE1BQW1DLEVBQ25DLFVBQWtCO0lBRWxCLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzFELE9BQU87UUFDTCxJQUFJO1FBQ0osUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUEyQztJQUN0RSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6RSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsK0RBQStEO0FBQy9ELFNBQWdCLDBCQUEwQixDQUFDLElBQTJDO0lBQ3BGLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxnQ0FBd0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUkseUNBQXFCLENBQzdCLGtDQUFrQyxJQUFJLENBQUMsTUFBTSxzREFBc0QsZ0NBQXdCLENBQUMsYUFBYSxFQUFFLENBQzVJLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLElBQUksVUFBVSxHQUFHLGdDQUF3QixDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0QsTUFBTSxJQUFJLHlDQUFxQixDQUM3Qiw4QkFBOEIsVUFBVSxpREFBaUQsZ0NBQXdCLENBQUMsZ0JBQWdCLEVBQUUsQ0FDckksQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLFNBQWdCLGVBQWUsQ0FDN0IsUUFBMkMsRUFDM0MsUUFBK0M7SUFFL0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLElBQUksR0FBc0IsRUFBRSxDQUFDO0lBQ25DLE1BQU0sT0FBTyxHQUF3QixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRXZHLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDbkgsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbkIsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNSLFdBQVcsRUFBRSxZQUFZO2dCQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM3QixrQkFBa0IsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDcEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxLQUFLO2FBQzNCLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1lBQ3hCLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNSLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM3QixrQkFBa0IsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDcEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxLQUFLO2FBQzNCLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1lBQ3JCLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZILE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0QsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsV0FBVyxFQUFFLFNBQVM7WUFDdEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixrQkFBa0IsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUNwQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixZQUE0QyxFQUM1QyxRQUErQyxFQUMvQyxVQUF5RCxFQUFFO0lBRTNELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLElBQUksR0FBRyxFQUFVLENBQUM7SUFFN0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXdDLENBQUM7SUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXdDLENBQUM7SUFDaEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQXVCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLHVCQUF1QixHQUFhLEVBQUUsQ0FBQztJQUU3QyxNQUFNLFlBQVksR0FBRyxDQUNuQixLQUEwQixFQUMxQixNQUFrQyxFQUNsQyxTQUFvQyxFQUNwQyxXQUFvQixFQUNwQixRQUFpQyxFQUMzQixFQUFFO1FBQ1IsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNiLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUM1QyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ3ZCLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSztZQUN2QixlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDakMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQy9CLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQ25DLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSztZQUN6QixTQUFTO1lBQ1QsV0FBVztZQUNYLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNwRCxRQUFRLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxtQ0FBMkIsRUFBRTtTQUMxRSxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixLQUFLLE1BQU0sS0FBSyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRCxNQUFNLGdCQUFnQixHQUFHLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEtBQUssTUFBTSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdEMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUMzRixDQUFDO1lBQ0QsU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLG9CQUFvQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEcsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3JDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztZQUM1RixDQUFDO1lBQ0QsU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEYsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRTtnQkFDOUQsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLGVBQWUsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUM3QyxDQUFDLENBQUM7WUFDSCxTQUFTO1FBQ1gsQ0FBQztRQUVELHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztBQUNoRCxDQUFDO0FBRUQsK0ZBQStGO0FBQy9GLFNBQWdCLHNCQUFzQixDQUNwQyxhQUFzRSxFQUN0RSxRQUErQztJQUUvQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sU0FBUyxHQUF1QixFQUFFLENBQUM7SUFDekMsTUFBTSx1QkFBdUIsR0FBYSxFQUFFLENBQUM7SUFFN0MsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVM7UUFDWCxDQUFDO1FBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNiLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUM1QyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ3ZCLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSztZQUN2QixlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDakMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQy9CLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQ25DLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSztZQUN6QixTQUFTLEVBQUUsVUFBVTtZQUNyQixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsS0FBSztZQUNqQixRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsbUNBQTJCLEVBQUU7U0FDckYsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztBQUNoRCxDQUFDIn0=
@@ -8,6 +8,16 @@ export interface ResolvedFigsharePublishingConfigData extends FigsharePublishing
8
8
  }
9
9
  export declare function getBrandName(record?: RecordModel): string;
10
10
  export declare function resolveFigsharePublishingConfig(record?: RecordModel): ResolvedFigsharePublishingConfigData | null;
11
+ /**
12
+ * Resolve the brand's Figshare connection for vocabulary administration.
13
+ *
14
+ * Unlike {@link resolveFigsharePublishingConfig} this deliberately ignores the
15
+ * `enabled` flag: catalogue discovery and crosswalk maintenance are useful before
16
+ * record publishing is switched on. The token is resolved server-side and may be
17
+ * empty, because the public catalogue is anonymous; callers requiring the account
18
+ * catalogue must check for a token themselves.
19
+ */
20
+ export declare function resolveFigshareVocabularyConfig(brandName: string): ResolvedFigsharePublishingConfigData | null;
11
21
  export declare function getSyncState(config: FigsharePublishingConfigData, record: RecordModel): FigshareSyncState;
12
22
  export declare function setSyncState(config: FigsharePublishingConfigData, record: RecordModel, syncState: FigshareSyncState): void;
13
23
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/config.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EAClC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAkC,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzF,MAAM,WAAW,oCAAqC,SAAQ,4BAA4B;IACxF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;KAClC,CAAC;CACH;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CA0BzD;AAkBD,wBAAgB,+BAA+B,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,oCAAoC,GAAG,IAAI,CAkCjH;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAEzG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAO1H"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/config.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EAClC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAkC,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzF,MAAM,WAAW,oCAAqC,SAAQ,4BAA4B;IACxF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;KAClC,CAAC;CACH;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CA0BzD;AAkBD,wBAAgB,+BAA+B,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,oCAAoC,GAAG,IAAI,CAkCjH;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,oCAAoC,GAAG,IAAI,CA4B9G;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAEzG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAO1H"}
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getBrandName = getBrandName;
7
7
  exports.resolveFigsharePublishingConfig = resolveFigsharePublishingConfig;
8
+ exports.resolveFigshareVocabularyConfig = resolveFigshareVocabularyConfig;
8
9
  exports.getSyncState = getSyncState;
9
10
  exports.setSyncState = setSyncState;
10
11
  const lodash_1 = __importDefault(require("lodash"));
@@ -91,6 +92,43 @@ function resolveFigsharePublishingConfig(record) {
91
92
  }
92
93
  return null;
93
94
  }
95
+ /**
96
+ * Resolve the brand's Figshare connection for vocabulary administration.
97
+ *
98
+ * Unlike {@link resolveFigsharePublishingConfig} this deliberately ignores the
99
+ * `enabled` flag: catalogue discovery and crosswalk maintenance are useful before
100
+ * record publishing is switched on. The token is resolved server-side and may be
101
+ * empty, because the public catalogue is anonymous; callers requiring the account
102
+ * catalogue must check for a token themselves.
103
+ */
104
+ function resolveFigshareVocabularyConfig(brandName) {
105
+ const appConfigService = index_1.ServiceExports.AppConfigService;
106
+ const brandConfig = appConfigService?.getAppConfigurationForBrand?.(brandName)
107
+ ?? appConfigService?.getAppConfigurationForBrand?.('default');
108
+ const brandConfigRecord = brandConfig != null && typeof brandConfig === 'object' ? brandConfig : undefined;
109
+ const figsharePublishing = brandConfigRecord?.figsharePublishing;
110
+ const figsharePublishingConfig = figsharePublishing != null && typeof figsharePublishing === 'object'
111
+ ? figsharePublishing
112
+ : undefined;
113
+ if (figsharePublishingConfig == null) {
114
+ return null;
115
+ }
116
+ const resolvedConfig = lodash_1.default.merge(new FigsharePublishing_1.FigsharePublishing(), lodash_1.default.cloneDeep(figsharePublishingConfig));
117
+ const figshareDev = resolveFigshareDevConfig();
118
+ const useFixtureRuntime = shouldUseFixtureRuntime(figshareDev);
119
+ resolvedConfig.runtime = {
120
+ mode: useFixtureRuntime ? 'fixture' : 'live',
121
+ fixtures: useFixtureRuntime ? lodash_1.default.cloneDeep(figshareDev.fixtures) : undefined
122
+ };
123
+ resolvedConfig.connection = resolvedConfig.connection != null && typeof resolvedConfig.connection === 'object'
124
+ ? resolvedConfig.connection
125
+ : { ...new FigsharePublishing_1.FigsharePublishing().connection };
126
+ const connectionToken = resolvedConfig.connection.token;
127
+ resolvedConfig.connection.token = typeof connectionToken === 'string' && connectionToken.trim() !== ''
128
+ ? (0, FigsharePublishing_1.resolveFigshareConnectionToken)(connectionToken, { allowEmpty: true })
129
+ : '';
130
+ return resolvedConfig;
131
+ }
94
132
  function getSyncState(config, record) {
95
133
  return (0, types_1.getRecordField)(record, config.record.syncStatePath) ?? { status: 'idle' };
96
134
  }
@@ -102,4 +140,4 @@ function setSyncState(config, record, syncState) {
102
140
  (0, types_1.setRecordField)(record, config.record.statusPath, syncState.status);
103
141
  (0, types_1.setRecordField)(record, config.record.errorPath, syncState.lastError ?? '');
104
142
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWtCQSxvQ0EwQkM7QUFrQkQsMEVBa0NDO0FBRUQsb0NBRUM7QUFFRCxvQ0FPQztBQTdHRCxvREFBdUI7QUFDdkIsOEVBSytDO0FBRS9DLG1DQUF5RjtBQUN6RixvQ0FBMEM7QUFTMUMsU0FBZ0IsWUFBWSxDQUFDLE1BQW9CO0lBQy9DLElBQUksTUFBTSxJQUFJLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNyQyxNQUFNLEVBQUUsR0FBRyxNQUFxQixDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLE9BQU8sSUFBSyxNQUFrQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvRyxJQUFJLFFBQVEsS0FBSyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFdEMscUZBQXFGO0lBQ3JGLHVGQUF1RjtJQUN2RixtRkFBbUY7SUFDbkYsNENBQTRDO0lBQzVDLE1BQU0sZUFBZSxHQUFHLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDN0YsSUFBSSxlQUFlLElBQUksSUFBSTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzdDLE1BQU0sU0FBUyxHQUFHLE9BQU8sZUFBZSxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxSCxJQUFJLFNBQVMsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxF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
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWtCQSxvQ0EwQkM7QUFrQkQsMEVBa0NDO0FBV0QsMEVBNEJDO0FBRUQsb0NBRUM7QUFFRCxvQ0FPQztBQXBKRCxvREFBdUI7QUFDdkIsOEVBSytDO0FBRS9DLG1DQUF5RjtBQUN6RixvQ0FBMEM7QUFTMUMsU0FBZ0IsWUFBWSxDQUFDLE1BQW9CO0lBQy9DLElBQUksTUFBTSxJQUFJLElBQUk7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNyQyxNQUFNLEVBQUUsR0FBRyxNQUFxQixDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLE9BQU8sSUFBSyxNQUFrQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvRyxJQUFJLFFBQVEsS0FBSyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFdEMscUZBQXFGO0lBQ3JGLHVGQUF1RjtJQUN2RixtRkFBbUY7SUFDbkYsNENBQTRDO0lBQzVDLE1BQU0sZUFBZSxHQUFHLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDN0YsSUFBSSxlQUFlLElBQUksSUFBSTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzdDLE1BQU0sU0FBUyxHQUFHLE9BQU8sZUFBZSxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMxSCxJQUFJLFNBQVMsRUFBRSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFF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
@@ -1,4 +1,21 @@
1
1
  import { FigsharePublishingConfigData } from '../../configmodels/FigsharePublishing';
2
- import { FigshareRunContext, RecordModel } from './types';
2
+ import { AnyRecord, FigshareRunContext, RecordModel } from './types';
3
+ /**
4
+ * Ambient information a binding may need that cannot be read off its evaluation
5
+ * target. Author lookup rules, for example, evaluate against a contributor object
6
+ * rather than the record, so the brand has to be carried alongside.
7
+ */
8
+ export interface BindingContext {
9
+ brandId: string;
10
+ record: AnyRecord;
11
+ }
12
+ /**
13
+ * Resolve the brand a record belongs to. `metaMetadata.brandId` wins; `branding`
14
+ * is the fallback. Either may hold an ID or a name, so both are probed against
15
+ * BrandingService before giving up and returning the raw value.
16
+ */
17
+ export declare function resolveBrandId(record: RecordModel): string;
18
+ /** Build the binding context once per payload so BrandingService is hit only once. */
19
+ export declare function createBindingContext(record: RecordModel): BindingContext;
3
20
  export declare function createRunContext(record: RecordModel, config: FigsharePublishingConfigData, jobId?: string, triggerSource?: string): FigshareRunContext;
4
21
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAC;AAG1E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,4BAA4B,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,GAAE,MAAiB,GAAG,kBAAkB,CAchK"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAkB,MAAM,SAAS,CAAC;AAGrF;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAW1D;AAED,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAExE;AAYD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,4BAA4B,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,GAAE,MAAiB,GAAG,kBAAkB,CAchK"}
@@ -1,11 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveBrandId = resolveBrandId;
4
+ exports.createBindingContext = createBindingContext;
3
5
  exports.createRunContext = createRunContext;
4
6
  const types_1 = require("./types");
5
7
  const config_1 = require("./config");
8
+ /**
9
+ * Resolve the brand a record belongs to. `metaMetadata.brandId` wins; `branding`
10
+ * is the fallback. Either may hold an ID or a name, so both are probed against
11
+ * BrandingService before giving up and returning the raw value.
12
+ */
13
+ function resolveBrandId(record) {
14
+ const rawBrand = String(record?.metaMetadata?.brandId ?? record?.branding ?? '').trim();
15
+ if (rawBrand === '') {
16
+ return '';
17
+ }
18
+ const brandingService = typeof BrandingService === 'undefined' ? undefined : BrandingService;
19
+ if (brandingService?.getBrandById?.(rawBrand)?.id != null) {
20
+ return rawBrand;
21
+ }
22
+ const byName = brandingService?.getBrand?.(rawBrand);
23
+ return byName?.id == null ? rawBrand : String(byName.id);
24
+ }
25
+ /** Build the binding context once per payload so BrandingService is hit only once. */
26
+ function createBindingContext(record) {
27
+ return { brandId: resolveBrandId(record), record: record };
28
+ }
29
+ function inferRecordOid(record, jobId) {
30
+ const rm = record;
31
+ const fromRecord = String(rm.redboxOid ?? rm.id ?? rm.oid ?? '').trim();
32
+ if (fromRecord) {
33
+ return fromRecord;
34
+ }
35
+ const fromJobId = String(jobId ?? '').match(/^([^:]+):/)?.[1] ?? '';
36
+ return fromJobId.trim();
37
+ }
6
38
  function createRunContext(record, config, jobId, triggerSource = 'manual') {
7
39
  const rm = record;
8
- const recordOid = rm.redboxOid ?? rm.id ?? '';
40
+ const recordOid = inferRecordOid(rm, jobId);
9
41
  const articleId = (0, types_1.getRecordField)(rm, config.record.articleIdPath);
10
42
  const correlationId = jobId || `${recordOid || 'record'}-${Date.now()}`;
11
43
  return {
@@ -18,4 +50,4 @@ function createRunContext(record, config, jobId, triggerSource = 'manual') {
18
50
  triggerSource
19
51
  };
20
52
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsNENBY0M7QUFqQkQsbUNBQTBFO0FBQzFFLHFDQUF3QztBQUV4QyxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFtQixFQUFFLE1BQW9DLEVBQUUsS0FBYyxFQUFFLGdCQUF3QixRQUFRO0lBQzFJLE1BQU0sRUFBRSxHQUFHLE1BQXFCLENBQUM7SUFDakMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFBLHNCQUFjLEVBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEUsTUFBTSxhQUFhLEdBQUcsS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUN4RSxPQUFPO1FBQ0wsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDNUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLE9BQU8sSUFBSyxNQUFrQyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUM7UUFDdEcsU0FBUyxFQUFFLElBQUEscUJBQVksRUFBQyxNQUFNLENBQUM7UUFDL0IsU0FBUyxFQUFFLFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2hGLEtBQUs7UUFDTCxhQUFhO1FBQ2IsYUFBYTtLQUNkLENBQUM7QUFDSixDQUFDIn0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbUJBLHdDQVdDO0FBR0Qsb0RBRUM7QUFZRCw0Q0FjQztBQTVERCxtQ0FBcUY7QUFDckYscUNBQXdDO0FBWXhDOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsTUFBbUI7SUFDaEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFLLE1BQWtDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JILElBQUksUUFBUSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sZUFBZSxHQUFHLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDN0YsSUFBSSxlQUFlLEVBQUUsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzFELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxlQUFlLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsT0FBTyxNQUFNLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYsU0FBZ0Isb0JBQW9CLENBQUMsTUFBbUI7SUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQW1CLEVBQUUsQ0FBQztBQUMxRSxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsTUFBbUIsRUFBRSxLQUFjO0lBQ3pELE1BQU0sRUFBRSxHQUFHLE1BQTRFLENBQUM7SUFDeEYsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hFLElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEUsT0FBTyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLE1BQW1CLEVBQUUsTUFBb0MsRUFBRSxLQUFjLEVBQUUsZ0JBQXdCLFFBQVE7SUFDMUksTUFBTSxFQUFFLEdBQUcsTUFBcUIsQ0FBQztJQUNqQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUEsc0JBQWMsRUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsRSxNQUFNLGFBQWEsR0FBRyxLQUFLLElBQUksR0FBRyxTQUFTLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3hFLE9BQU87UUFDTCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUM1QixPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxJQUFLLE1BQWtDLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQztRQUN0RyxTQUFTLEVBQUUsSUFBQSxxQkFBWSxFQUFDLE1BQU0sQ0FBQztRQUMvQixTQUFTLEVBQUUsU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDaEYsS0FBSztRQUNMLGFBQWE7UUFDYixhQUFhO0tBQ2QsQ0FBQztBQUNKLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"embargo.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/embargo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAA2C,MAAM,SAAS,CAAC;AAe/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA2B7K"}
1
+ {"version":3,"file":"embargo.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/embargo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAA2C,MAAM,SAAS,CAAC;AAgB/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4B7K"}