@researchdatabox/redbox-core 0.0.1-beta.8936 → 0.0.1-beta.9018

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 (209) hide show
  1. package/dist/IntegrationAuditParams.d.ts +11 -0
  2. package/dist/IntegrationAuditParams.d.ts.map +1 -0
  3. package/dist/IntegrationAuditParams.js +14 -0
  4. package/dist/RecordAuditParams.d.ts +2 -0
  5. package/dist/RecordAuditParams.d.ts.map +1 -1
  6. package/dist/RecordAuditParams.js +3 -1
  7. package/dist/RecordsService.d.ts +14 -0
  8. package/dist/RecordsService.d.ts.map +1 -1
  9. package/dist/StorageService.d.ts +3 -0
  10. package/dist/StorageService.d.ts.map +1 -1
  11. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  12. package/dist/config/agendaQueue.config.js +10 -1
  13. package/dist/config/auth.config.d.ts.map +1 -1
  14. package/dist/config/auth.config.js +2 -1
  15. package/dist/config/brandingConfigurationDefaults.config.d.ts +3 -0
  16. package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
  17. package/dist/config/brandingConfigurationDefaults.config.js +154 -3
  18. package/dist/config/figshareDev.config.d.ts +12 -0
  19. package/dist/config/figshareDev.config.d.ts.map +1 -0
  20. package/dist/config/figshareDev.config.js +9 -0
  21. package/dist/config/index.d.ts +4 -16
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +4 -13
  24. package/dist/config/recordtype.config.d.ts.map +1 -1
  25. package/dist/config/recordtype.config.js +17 -1
  26. package/dist/config/routes.config.d.ts.map +1 -1
  27. package/dist/config/routes.config.js +47 -43
  28. package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
  29. package/dist/configmodels/AdminSidebarConfig.js +3 -2
  30. package/dist/configmodels/AuthorizedDomainsEmails.d.ts +48 -0
  31. package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -1
  32. package/dist/configmodels/AuthorizedDomainsEmails.js +50 -2
  33. package/dist/configmodels/ConfigModels.d.ts +7 -1
  34. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  35. package/dist/configmodels/ConfigModels.js +25 -1
  36. package/dist/configmodels/DoiPublishing.d.ts +4711 -0
  37. package/dist/configmodels/DoiPublishing.d.ts.map +1 -0
  38. package/dist/configmodels/DoiPublishing.js +639 -0
  39. package/dist/configmodels/FigsharePublishing.d.ts +1376 -0
  40. package/dist/configmodels/FigsharePublishing.d.ts.map +1 -0
  41. package/dist/configmodels/FigsharePublishing.js +630 -0
  42. package/dist/configmodels/SystemMessage.d.ts +32 -0
  43. package/dist/configmodels/SystemMessage.d.ts.map +1 -1
  44. package/dist/configmodels/SystemMessage.js +34 -2
  45. package/dist/controllers/AppConfigController.js +3 -3
  46. package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
  47. package/dist/controllers/FormVocabularyController.js +4 -1
  48. package/dist/controllers/RecordAuditController.d.ts +29 -14
  49. package/dist/controllers/RecordAuditController.d.ts.map +1 -1
  50. package/dist/controllers/RecordAuditController.js +455 -57
  51. package/dist/controllers/RecordController.d.ts +1 -16
  52. package/dist/controllers/RecordController.d.ts.map +1 -1
  53. package/dist/controllers/RecordController.js +20 -39
  54. package/dist/controllers/index.d.ts.map +1 -1
  55. package/dist/controllers/index.js +4 -1
  56. package/dist/controllers/webservice/AppConfigController.js +3 -3
  57. package/dist/controllers/webservice/IntegrationAuditController.d.ts +10 -0
  58. package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -0
  59. package/dist/controllers/webservice/IntegrationAuditController.js +98 -0
  60. package/dist/form-config/default-1.0-draft.d.ts.map +1 -1
  61. package/dist/form-config/default-1.0-draft.js +26 -2
  62. package/dist/form-config/index.d.ts.map +1 -1
  63. package/dist/form-config/index.js +1 -1
  64. package/dist/index.d.ts +4 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +12 -2
  67. package/dist/model/storage/IntegrationAuditModel.d.ts +47 -0
  68. package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -0
  69. package/dist/model/storage/IntegrationAuditModel.js +104 -0
  70. package/dist/model/storage/index.d.ts +1 -0
  71. package/dist/model/storage/index.d.ts.map +1 -1
  72. package/dist/model/storage/index.js +7 -2
  73. package/dist/services/AppConfigService.d.ts +20 -2
  74. package/dist/services/AppConfigService.d.ts.map +1 -1
  75. package/dist/services/AppConfigService.js +129 -15
  76. package/dist/services/DoiService.d.ts +19 -25
  77. package/dist/services/DoiService.d.ts.map +1 -1
  78. package/dist/services/DoiService.js +258 -408
  79. package/dist/services/FigshareService.d.ts +35 -65
  80. package/dist/services/FigshareService.d.ts.map +1 -1
  81. package/dist/services/FigshareService.js +477 -2056
  82. package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
  83. package/dist/services/FormRecordConsistencyService.js +4 -2
  84. package/dist/services/FormsService.d.ts.map +1 -1
  85. package/dist/services/FormsService.js +4 -2
  86. package/dist/services/IntegrationAuditService.d.ts +100 -0
  87. package/dist/services/IntegrationAuditService.d.ts.map +1 -0
  88. package/dist/services/IntegrationAuditService.js +561 -0
  89. package/dist/services/RecordsService.d.ts +16 -0
  90. package/dist/services/RecordsService.d.ts.map +1 -1
  91. package/dist/services/RecordsService.js +54 -2
  92. package/dist/services/SolrSearchService.d.ts +1 -0
  93. package/dist/services/SolrSearchService.d.ts.map +1 -1
  94. package/dist/services/SolrSearchService.js +14 -3
  95. package/dist/services/VocabularyService.d.ts +1 -0
  96. package/dist/services/VocabularyService.d.ts.map +1 -1
  97. package/dist/services/VocabularyService.js +4 -1
  98. package/dist/services/doi-v2/audit.d.ts +7 -0
  99. package/dist/services/doi-v2/audit.d.ts.map +1 -0
  100. package/dist/services/doi-v2/audit.js +30 -0
  101. package/dist/services/doi-v2/bindings.d.ts +8 -0
  102. package/dist/services/doi-v2/bindings.d.ts.map +1 -0
  103. package/dist/services/doi-v2/bindings.js +85 -0
  104. package/dist/services/doi-v2/config.d.ts +7 -0
  105. package/dist/services/doi-v2/config.d.ts.map +1 -0
  106. package/dist/services/doi-v2/config.js +51 -0
  107. package/dist/services/doi-v2/context.d.ts +18 -0
  108. package/dist/services/doi-v2/context.d.ts.map +1 -0
  109. package/dist/services/doi-v2/context.js +41 -0
  110. package/dist/services/doi-v2/http.d.ts +21 -0
  111. package/dist/services/doi-v2/http.d.ts.map +1 -0
  112. package/dist/services/doi-v2/http.js +88 -0
  113. package/dist/services/doi-v2/payload.d.ts +4 -0
  114. package/dist/services/doi-v2/payload.d.ts.map +1 -0
  115. package/dist/services/doi-v2/payload.js +291 -0
  116. package/dist/services/doi-v2/profiles.d.ts +5 -0
  117. package/dist/services/doi-v2/profiles.d.ts.map +1 -0
  118. package/dist/services/doi-v2/profiles.js +31 -0
  119. package/dist/services/doi-v2/runtime.d.ts +16 -0
  120. package/dist/services/doi-v2/runtime.d.ts.map +1 -0
  121. package/dist/services/doi-v2/runtime.js +173 -0
  122. package/dist/services/doi-v2/types.d.ts +49 -0
  123. package/dist/services/doi-v2/types.d.ts.map +1 -0
  124. package/dist/services/doi-v2/types.js +3 -0
  125. package/dist/services/figshare-v2/assets.d.ts +5 -0
  126. package/dist/services/figshare-v2/assets.d.ts.map +1 -0
  127. package/dist/services/figshare-v2/assets.js +297 -0
  128. package/dist/services/figshare-v2/bindings.d.ts +6 -0
  129. package/dist/services/figshare-v2/bindings.d.ts.map +1 -0
  130. package/dist/services/figshare-v2/bindings.js +60 -0
  131. package/dist/services/figshare-v2/config.d.ts +13 -0
  132. package/dist/services/figshare-v2/config.d.ts.map +1 -0
  133. package/dist/services/figshare-v2/config.js +81 -0
  134. package/dist/services/figshare-v2/context.d.ts +4 -0
  135. package/dist/services/figshare-v2/context.d.ts.map +1 -0
  136. package/dist/services/figshare-v2/context.js +20 -0
  137. package/dist/services/figshare-v2/embargo.d.ts +5 -0
  138. package/dist/services/figshare-v2/embargo.d.ts.map +1 -0
  139. package/dist/services/figshare-v2/embargo.js +36 -0
  140. package/dist/services/figshare-v2/http.d.ts +25 -0
  141. package/dist/services/figshare-v2/http.d.ts.map +1 -0
  142. package/dist/services/figshare-v2/http.js +270 -0
  143. package/dist/services/figshare-v2/metadata.d.ts +6 -0
  144. package/dist/services/figshare-v2/metadata.d.ts.map +1 -0
  145. package/dist/services/figshare-v2/metadata.js +221 -0
  146. package/dist/services/figshare-v2/observability.d.ts +7 -0
  147. package/dist/services/figshare-v2/observability.d.ts.map +1 -0
  148. package/dist/services/figshare-v2/observability.js +85 -0
  149. package/dist/services/figshare-v2/plan.d.ts +5 -0
  150. package/dist/services/figshare-v2/plan.d.ts.map +1 -0
  151. package/dist/services/figshare-v2/plan.js +51 -0
  152. package/dist/services/figshare-v2/publish.d.ts +5 -0
  153. package/dist/services/figshare-v2/publish.d.ts.map +1 -0
  154. package/dist/services/figshare-v2/publish.js +20 -0
  155. package/dist/services/figshare-v2/queue.d.ts +4 -0
  156. package/dist/services/figshare-v2/queue.d.ts.map +1 -0
  157. package/dist/services/figshare-v2/queue.js +11 -0
  158. package/dist/services/figshare-v2/runtime.d.ts +11 -0
  159. package/dist/services/figshare-v2/runtime.d.ts.map +1 -0
  160. package/dist/services/figshare-v2/runtime.js +116 -0
  161. package/dist/services/figshare-v2/types.d.ts +194 -0
  162. package/dist/services/figshare-v2/types.d.ts.map +1 -0
  163. package/dist/services/figshare-v2/types.js +37 -0
  164. package/dist/services/figshare-v2/workflow.d.ts +3 -0
  165. package/dist/services/figshare-v2/workflow.d.ts.map +1 -0
  166. package/dist/services/figshare-v2/workflow.js +7 -0
  167. package/dist/services/figshare-v2/writeback.d.ts +5 -0
  168. package/dist/services/figshare-v2/writeback.d.ts.map +1 -0
  169. package/dist/services/figshare-v2/writeback.js +45 -0
  170. package/dist/services/index.d.ts +3 -0
  171. package/dist/services/index.d.ts.map +1 -1
  172. package/dist/services/index.js +7 -2
  173. package/dist/visitor/client.visitor.d.ts +3 -0
  174. package/dist/visitor/client.visitor.d.ts.map +1 -1
  175. package/dist/visitor/client.visitor.js +8 -1
  176. package/dist/visitor/construct.visitor.d.ts +3 -0
  177. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  178. package/dist/visitor/construct.visitor.js +95 -70
  179. package/dist/visitor/data-value.visitor.d.ts +3 -0
  180. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  181. package/dist/visitor/data-value.visitor.js +5 -1
  182. package/dist/visitor/json-type-def.visitor.d.ts +3 -0
  183. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  184. package/dist/visitor/json-type-def.visitor.js +5 -1
  185. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +3 -0
  186. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  187. package/dist/visitor/migrate-config-v4-v5.visitor.js +77 -64
  188. package/dist/visitor/template.visitor.d.ts +3 -0
  189. package/dist/visitor/template.visitor.d.ts.map +1 -1
  190. package/dist/visitor/template.visitor.js +5 -1
  191. package/dist/visitor/validator.visitor.d.ts +3 -1
  192. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  193. package/dist/visitor/validator.visitor.js +6 -1
  194. package/dist/visitor/vocab-inline.visitor.d.ts +16 -1
  195. package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
  196. package/dist/visitor/vocab-inline.visitor.js +109 -14
  197. package/package.json +23 -16
  198. package/dist/config/datacite.config.d.ts +0 -51
  199. package/dist/config/datacite.config.d.ts.map +0 -1
  200. package/dist/config/datacite.config.js +0 -44
  201. package/dist/config/figshareAPI.config.d.ts +0 -116
  202. package/dist/config/figshareAPI.config.d.ts.map +0 -1
  203. package/dist/config/figshareAPI.config.js +0 -857
  204. package/dist/config/figshareAPIEnv.config.d.ts +0 -11
  205. package/dist/config/figshareAPIEnv.config.d.ts.map +0 -1
  206. package/dist/config/figshareAPIEnv.config.js +0 -13
  207. package/dist/config/figshareRedboxFORMapping.config.d.ts +0 -15
  208. package/dist/config/figshareRedboxFORMapping.config.d.ts.map +0 -1
  209. package/dist/config/figshareRedboxFORMapping.config.js +0 -7458
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildMetadataPayload = buildMetadataPayload;
7
+ exports.syncMetadataPhase = syncMetadataPhase;
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const RBValidationError_1 = require("../../model/RBValidationError");
10
+ const types_1 = require("./types");
11
+ const bindings_1 = require("./bindings");
12
+ const figshareLicenseCache = new Map();
13
+ function validationError(message) {
14
+ return new RBValidationError_1.RBValidationError({
15
+ message,
16
+ displayErrors: [{ title: message, detail: message }]
17
+ });
18
+ }
19
+ function getDefaultContributors(config, record) {
20
+ const contributorPaths = Array.isArray(config.authors.contributorPaths) && config.authors.contributorPaths.length > 0
21
+ ? config.authors.contributorPaths
22
+ : ['metadata.contributor_ci', 'metadata.contributor_data_manager', 'metadata.dataOwner', 'metadata.chiefInvestigator', 'metadata.contributors'];
23
+ const contributors = contributorPaths
24
+ .flatMap((contributorPath) => {
25
+ const value = (0, types_1.getRecordField)(record, contributorPath);
26
+ return Array.isArray(value) ? value : value != null ? [value] : [];
27
+ })
28
+ .filter((entry) => typeof entry === 'object' && entry != null && !Array.isArray(entry));
29
+ return contributors;
30
+ }
31
+ function applyAuthorLookupTransform(config, matchBy, value) {
32
+ if (matchBy !== 'email') {
33
+ return value;
34
+ }
35
+ let normalized = value.trim();
36
+ if (normalized === '') {
37
+ return normalized;
38
+ }
39
+ const prefix = (config.authors.emailTransform?.prefix ?? '').trim();
40
+ const domainOverride = (config.authors.emailTransform?.domainOverride ?? '').trim();
41
+ const [localPart, domainPart = ''] = normalized.split('@');
42
+ if (prefix !== '' && localPart !== '' && !localPart.startsWith(prefix)) {
43
+ normalized = `${prefix}${localPart}${domainPart ? `@${domainPart}` : ''}`;
44
+ }
45
+ if (domainOverride !== '' && localPart !== '') {
46
+ const nextLocalPart = normalized.split('@')[0] || localPart;
47
+ normalized = `${nextLocalPart}@${domainOverride.replace(/^@+/, '')}`;
48
+ }
49
+ return normalized;
50
+ }
51
+ async function resolveAuthors(client, config, record) {
52
+ const contributors = getDefaultContributors(config, record);
53
+ if (contributors.length === 0) {
54
+ return [];
55
+ }
56
+ const uniqueContributors = config.authors.uniqueBy === 'none'
57
+ ? contributors
58
+ : lodash_1.default.uniqBy(contributors, (entry) => String(entry[config.authors.uniqueBy] ?? ''));
59
+ const resolvedAuthors = [];
60
+ for (const contributor of uniqueContributors.slice(0, config.authors.maxInlineAuthors)) {
61
+ let matched = false;
62
+ for (const rule of config.authors.lookup) {
63
+ const rawValue = await (0, bindings_1.evaluateBinding)(rule.value, contributor);
64
+ const value = typeof rawValue === 'string' ? applyAuthorLookupTransform(config, rule.matchBy, rawValue) : rawValue;
65
+ if (value == null || value === '') {
66
+ continue;
67
+ }
68
+ const matches = await client.searchInstitutionAccounts({ [rule.matchBy]: value });
69
+ const firstMatch = matches[0];
70
+ if (firstMatch?.id != null && firstMatch.id !== '') {
71
+ resolvedAuthors.push({ id: firstMatch.id });
72
+ matched = true;
73
+ break;
74
+ }
75
+ }
76
+ if (!matched) {
77
+ const fallbackName = contributor[config.authors.externalNameField] ?? contributor.text_full_name ?? contributor.name;
78
+ if (fallbackName != null && fallbackName !== '') {
79
+ resolvedAuthors.push({ name: String(fallbackName) });
80
+ }
81
+ }
82
+ }
83
+ return resolvedAuthors;
84
+ }
85
+ function matchesLicense(matchBy, rawValue, license) {
86
+ const normalized = rawValue.trim().toLowerCase();
87
+ if (normalized === '') {
88
+ return false;
89
+ }
90
+ if (matchBy === 'nameExact') {
91
+ return license.name.trim().toLowerCase() === normalized;
92
+ }
93
+ if (matchBy === 'valueExact') {
94
+ return String(license.value ?? license.id ?? '').trim().toLowerCase() === normalized;
95
+ }
96
+ const candidate = `${license.url ?? ''} ${license.name} ${license.value ?? ''}`.toLowerCase();
97
+ return candidate.includes(normalized);
98
+ }
99
+ async function resolveLicense(client, config, record) {
100
+ const licenseValue = await (0, bindings_1.evaluateBinding)(config.metadata.license.source, record);
101
+ if (licenseValue == null || licenseValue === '') {
102
+ if (config.metadata.license.required) {
103
+ throw validationError('Figshare license is required');
104
+ }
105
+ return undefined;
106
+ }
107
+ const cacheKey = `${config.connection.baseUrl}::${config.connection.token}`;
108
+ let availableLicenses = figshareLicenseCache.get(cacheKey);
109
+ if (availableLicenses == null) {
110
+ availableLicenses = await client.listLicenses();
111
+ figshareLicenseCache.set(cacheKey, availableLicenses);
112
+ }
113
+ if (!Array.isArray(availableLicenses) || availableLicenses.length === 0) {
114
+ throw validationError(`Unable to resolve Figshare license '${licenseValue}' because no licenses were returned by Figshare`);
115
+ }
116
+ const matched = availableLicenses.find((license) => matchesLicense(config.metadata.license.matchBy, String(licenseValue), license));
117
+ if (matched == null) {
118
+ throw validationError(`Unable to resolve Figshare license '${licenseValue}'`);
119
+ }
120
+ return matched.value ?? matched.id ?? licenseValue;
121
+ }
122
+ function validatePayload(config, payload) {
123
+ if (String(payload.title ?? '').trim() === '') {
124
+ throw validationError('Figshare title is required');
125
+ }
126
+ if (String(payload.description ?? '').trim() === '') {
127
+ throw validationError('Figshare description is required');
128
+ }
129
+ if (config.metadata.license.required && payload.license == null) {
130
+ throw validationError('Figshare license is required');
131
+ }
132
+ const customFields = payload.custom_fields;
133
+ for (const customField of config.metadata.customFields) {
134
+ const value = customFields?.[customField.figshareField];
135
+ for (const validation of customField.validations || []) {
136
+ if (validation.type === 'required' && (value == null || value === '')) {
137
+ throw validationError(`Figshare custom field '${customField.figshareField}' is required`);
138
+ }
139
+ if (validation.type === 'maxLength' && typeof value === 'string' && validation.value != null && value.length > validation.value) {
140
+ throw validationError(`Figshare custom field '${customField.figshareField}' exceeds max length ${validation.value}`);
141
+ }
142
+ if (validation.type === 'url' && typeof value === 'string' && value !== '' && !/^https?:\/\//i.test(value)) {
143
+ throw validationError(`Figshare custom field '${customField.figshareField}' must be a URL`);
144
+ }
145
+ if (validation.type === 'doi' && typeof value === 'string' && value !== '' && !/^10\.\d{4,9}\//.test(value)) {
146
+ throw validationError(`Figshare custom field '${customField.figshareField}' must be a DOI`);
147
+ }
148
+ }
149
+ }
150
+ }
151
+ async function buildMetadataPayload(config, record, client) {
152
+ const recordData = record;
153
+ const payload = {
154
+ title: await (0, bindings_1.evaluateBinding)(config.metadata.title, recordData),
155
+ description: await (0, bindings_1.evaluateBinding)(config.metadata.description, recordData),
156
+ keywords: await (0, bindings_1.evaluateBinding)(config.metadata.keywords, recordData),
157
+ defined_type: config.article.itemType
158
+ };
159
+ if (config.article.groupId != null) {
160
+ payload.group_id = config.article.groupId;
161
+ }
162
+ const funding = await (0, bindings_1.evaluateBinding)(config.metadata.funding, recordData);
163
+ if (funding != null && funding !== '') {
164
+ payload.funding = funding;
165
+ }
166
+ const categorySource = await (0, bindings_1.evaluateBinding)(config.metadata.categories.source, recordData);
167
+ const sourceItems = Array.isArray(categorySource) ? categorySource : categorySource != null ? [categorySource] : [];
168
+ const sourceCodes = sourceItems.filter(Boolean).map((item) => typeof item === 'object' && item != null
169
+ ? String(item.notation ?? item.code ?? '')
170
+ : String(item));
171
+ const mappedCategories = sourceCodes
172
+ .map((sourceCode) => config.categories.mappingTable.find((entry) => entry.sourceCode === sourceCode)?.figshareCategoryId)
173
+ .filter((value) => value != null);
174
+ payload.categories = mappedCategories;
175
+ if (!config.categories.allowUnmapped && sourceCodes.length > 0 && mappedCategories.length === 0) {
176
+ throw validationError('No Figshare categories mapped for selected record categories');
177
+ }
178
+ const licenseValue = client == null
179
+ ? await (0, bindings_1.evaluateBinding)(config.metadata.license.source, recordData)
180
+ : await resolveLicense(client, config, record);
181
+ if (licenseValue != null && licenseValue !== '') {
182
+ payload.license = licenseValue;
183
+ }
184
+ if (client != null) {
185
+ const authors = await resolveAuthors(client, config, record);
186
+ if (authors.length > 0) {
187
+ payload.authors = authors;
188
+ }
189
+ }
190
+ if (config.metadata.relatedResource) {
191
+ const relatedTitle = String(await (0, bindings_1.evaluateBinding)(config.metadata.relatedResource.title, recordData) ?? '').trim();
192
+ const relatedIdentifier = String(await (0, bindings_1.evaluateBinding)(config.metadata.relatedResource.doi, recordData) ?? '').trim();
193
+ if (relatedTitle !== '' && relatedIdentifier !== '') {
194
+ payload.related_materials = [{
195
+ title: relatedTitle,
196
+ identifier: relatedIdentifier
197
+ }];
198
+ }
199
+ }
200
+ if (config.metadata.customFields.length > 0) {
201
+ const customFieldsPayload = {};
202
+ for (const customField of config.metadata.customFields) {
203
+ customFieldsPayload[customField.figshareField] = await (0, bindings_1.evaluateBinding)(customField.value, recordData);
204
+ }
205
+ payload.custom_fields = customFieldsPayload;
206
+ }
207
+ validatePayload(config, payload);
208
+ return payload;
209
+ }
210
+ async function syncMetadataPhase(client, config, record, plan) {
211
+ const payload = await buildMetadataPayload(config, record, client);
212
+ if (plan.action === 'create') {
213
+ return client.createArticle(payload);
214
+ }
215
+ const articleId = String(plan.articleId ?? '').trim();
216
+ if (articleId === '') {
217
+ throw validationError(`Figshare articleId is required for syncMetadataPhase action '${plan.action}'`);
218
+ }
219
+ return client.updateArticle(articleId, payload);
220
+ }
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZmlnc2hhcmUtdjIvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE4S0Esb0RBdUVDO0FBRUQsOENBVUM7QUFqUUQsb0RBQXVCO0FBRXZCLHFFQUFrRTtBQUVsRSxtQ0FTaUI7QUFDakIseUNBQTZDO0FBRTdDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7QUFFbEUsU0FBUyxlQUFlLENBQUMsT0FBZTtJQUN0QyxPQUFPLElBQUkscUNBQWlCLENBQUM7UUFDM0IsT0FBTztRQUNQLGFBQWEsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDckQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsTUFBb0MsRUFBRSxNQUFtQjtJQUN2RixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDbkgsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO1FBQ2pDLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLG1DQUFtQyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDbEosTUFBTSxZQUFZLEdBQUcsZ0JBQWdCO1NBQ2xDLE9BQU8sQ0FBQyxDQUFDLGVBQXVCLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFBLHNCQUFjLEVBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FB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
@@ -0,0 +1,7 @@
1
+ import { type Attributes } from '@opentelemetry/api';
2
+ import { FigshareRunContext } from './types';
3
+ export declare function redactSecret(value: unknown): unknown;
4
+ export declare function redactObject(value: unknown, visited?: WeakSet<object>): unknown;
5
+ export declare function withSpan<T>(name: string, runContext: FigshareRunContext, attributes: Attributes, fn: () => Promise<T>): Promise<T>;
6
+ export declare function logEvent(level: string, message: string, runContext: FigshareRunContext, payload?: unknown): void;
7
+ //# sourceMappingURL=observability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/observability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAK7C,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAcpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,OAAO,CAAC,MAAM,CAAyB,GAAG,OAAO,CAyBtG;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAuBlI;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,GAAE,OAAY,GAAG,IAAI,CASpH"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redactSecret = redactSecret;
4
+ exports.redactObject = redactObject;
5
+ exports.withSpan = withSpan;
6
+ exports.logEvent = logEvent;
7
+ const api_1 = require("@opentelemetry/api");
8
+ const JWT_PATTERN = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
9
+ const API_KEY_PATTERN = /^(sk_live_|sk_test_)[A-Za-z0-9]+$/;
10
+ function redactSecret(value) {
11
+ if (typeof value !== 'string') {
12
+ return value;
13
+ }
14
+ const trimmed = value.trim();
15
+ if (/^Bearer\s+/i.test(trimmed) ||
16
+ JWT_PATTERN.test(trimmed) ||
17
+ API_KEY_PATTERN.test(trimmed)) {
18
+ return 'REDACTED';
19
+ }
20
+ return value;
21
+ }
22
+ function redactObject(value, visited = new WeakSet()) {
23
+ if (Array.isArray(value)) {
24
+ if (visited.has(value)) {
25
+ return '[Circular]';
26
+ }
27
+ visited.add(value);
28
+ return value.map((entry) => redactObject(entry, visited));
29
+ }
30
+ if (value != null && typeof value === 'object' && !Array.isArray(value)) {
31
+ if (visited.has(value)) {
32
+ return '[Circular]';
33
+ }
34
+ visited.add(value);
35
+ const obj = value;
36
+ const result = {};
37
+ for (const [key, entry] of Object.entries(obj)) {
38
+ if (key.toLowerCase().includes('token') || key.toLowerCase().includes('authorization') || key.toLowerCase().includes('secret')) {
39
+ result[key] = 'REDACTED';
40
+ }
41
+ else {
42
+ result[key] = redactObject(entry, visited);
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+ return redactSecret(value);
48
+ }
49
+ function withSpan(name, runContext, attributes, fn) {
50
+ const tracer = api_1.trace.getTracer('redbox.figshare-v2');
51
+ return tracer.startActiveSpan(name, {
52
+ attributes: {
53
+ ...attributes,
54
+ 'figshare.record_oid': runContext.recordOid,
55
+ 'figshare.brand': runContext.brandName,
56
+ 'figshare.correlation_id': runContext.correlationId,
57
+ 'figshare.trigger_source': runContext.triggerSource
58
+ }
59
+ }, async (span) => {
60
+ try {
61
+ const result = await fn();
62
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
63
+ return result;
64
+ }
65
+ catch (error) {
66
+ span.recordException(error);
67
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error instanceof Error ? error.message : String(error) });
68
+ throw error;
69
+ }
70
+ finally {
71
+ span.end();
72
+ }
73
+ });
74
+ }
75
+ function logEvent(level, message, runContext, payload = {}) {
76
+ const logger = sails.log[level] || sails.log.info;
77
+ logger({
78
+ recordOid: runContext.recordOid,
79
+ brandName: runContext.brandName,
80
+ correlationId: runContext.correlationId,
81
+ triggerSource: runContext.triggerSource,
82
+ payload: redactObject(payload)
83
+ }, message);
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsb0NBY0M7QUFFRCxvQ0F5QkM7QUFFRCw0QkF1QkM7QUFFRCw0QkFTQztBQW5GRCw0Q0FBNEU7QUFHNUUsTUFBTSxXQUFXLEdBQUcsa0RBQWtELENBQUM7QUFDdkUsTUFBTSxlQUFlLEdBQUcsbUNBQW1DLENBQUM7QUFFNUQsU0FBZ0IsWUFBWSxDQUFDLEtBQWM7SUFDekMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsSUFDRSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN6QixlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUM3QixDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxLQUFjLEVBQUUsVUFBMkIsSUFBSSxPQUFPLEVBQVU7SUFDM0YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFF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
@@ -0,0 +1,5 @@
1
+ import { FigsharePublishingConfigData } from '../../configmodels/FigsharePublishing';
2
+ import { RecordModel, FigsharePublicationPlan, FigshareSyncState, DataLocationEntry } from './types';
3
+ export declare function getSelectedDataLocations(config: FigsharePublishingConfigData, record: RecordModel): DataLocationEntry[];
4
+ export declare function preparePublication(config: FigsharePublishingConfigData, record: RecordModel, existingState: FigshareSyncState, correlationId: string): FigsharePublicationPlan;
5
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAkB,MAAM,SAAS,CAAC;AAGrH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAiBvH;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,GAAG,uBAAuB,CA+B9K"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSelectedDataLocations = getSelectedDataLocations;
4
+ exports.preparePublication = preparePublication;
5
+ const types_1 = require("./types");
6
+ const config_1 = require("./config");
7
+ function getSelectedDataLocations(config, record) {
8
+ const dataLocations = ((0, types_1.getRecordField)(record, config.record.dataLocationsPath) ?? []);
9
+ return dataLocations.filter((entry) => {
10
+ if (entry == null || typeof entry !== 'object') {
11
+ return false;
12
+ }
13
+ if (entry.type === 'attachment') {
14
+ return config.selection.attachmentMode === 'all' || entry[config.selection.selectedFlagPath] === true;
15
+ }
16
+ if (entry.type === 'url') {
17
+ return config.selection.urlMode === 'all' || entry[config.selection.selectedFlagPath] === true;
18
+ }
19
+ return false;
20
+ });
21
+ }
22
+ function preparePublication(config, record, existingState, correlationId) {
23
+ const sameJob = existingState.lockOwner === correlationId;
24
+ const existingArticleId = (0, types_1.getRecordField)(record, config.record.articleIdPath);
25
+ if (!sameJob && (existingState.status === 'syncing' || existingState.status === 'awaiting_upload_completion')) {
26
+ sails.log.warn(`FigService v2 - skipping duplicate sync for record ${record.redboxOid ?? record.id}`);
27
+ return { action: 'skip', articleId: existingArticleId ? String(existingArticleId) : undefined, sameJob: false, syncState: existingState };
28
+ }
29
+ const hasArticleId = existingArticleId != null && existingArticleId !== '';
30
+ const action = !hasArticleId
31
+ ? 'create'
32
+ : existingState.status === 'published' && (config.article.republishOnMetadataChange || config.article.republishOnAssetChange)
33
+ ? 'republish'
34
+ : 'update';
35
+ const syncState = {
36
+ ...existingState,
37
+ status: 'syncing',
38
+ lockOwner: correlationId,
39
+ correlationId,
40
+ lastError: '',
41
+ lastSyncAt: new Date().toISOString()
42
+ };
43
+ (0, config_1.setSyncState)(config, record, syncState);
44
+ return {
45
+ action,
46
+ articleId: hasArticleId ? String(existingArticleId) : undefined,
47
+ sameJob,
48
+ syncState
49
+ };
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9wbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsNERBaUJDO0FBRUQsZ0RBK0JDO0FBckRELG1DQUFxSDtBQUNySCxxQ0FBd0M7QUFFeEMsU0FBZ0Isd0JBQXdCLENBQUMsTUFBb0MsRUFBRSxNQUFtQjtJQUNoRyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUEsc0JBQWMsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBd0IsQ0FBQztJQUM3RyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNwQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0MsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ2hDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3hHLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDakcsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsTUFBb0MsRUFBRSxNQUFtQixFQUFFLGFBQWdDLEVBQUUsYUFBcUI7SUFDbkosTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUM7SUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHNCQUFjLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssNEJBQTRCLENBQUMsRUFBRSxDQUFDO1FBQzlHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUM1SSxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLElBQUksSUFBSSxJQUFJLGlCQUFpQixLQUFLLEVBQUUsQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxDQUFDLFlBQVk7UUFDMUIsQ0FBQyxDQUFDLFFBQVE7UUFDVixDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDM0gsQ0FBQyxDQUFDLFdBQVc7WUFDYixDQUFDLENBQUMsUUFBUSxDQUFDO0lBRWYsTUFBTSxTQUFTLEdBQXNCO1FBQ25DLEdBQUcsYUFBYTtRQUNoQixNQUFNLEVBQUUsU0FBUztRQUNqQixTQUFTLEVBQUUsYUFBYTtRQUN4QixhQUFhO1FBQ2IsU0FBUyxFQUFFLEVBQUU7UUFDYixVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7S0FDckMsQ0FBQztJQUNGLElBQUEscUJBQVksRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXhDLE9BQU87UUFDTCxNQUFNO1FBQ04sU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDL0QsT0FBTztRQUNQLFNBQVM7S0FDVixDQUFDO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,5 @@
1
+ import { FigsharePublishingConfigData } from '../../configmodels/FigsharePublishing';
2
+ import { FigshareClient } from './http';
3
+ import { RecordModel, FigshareSyncState, FigsharePublishResult } from './types';
4
+ export declare function publishIfNeededPhase(client: FigshareClient, config: FigsharePublishingConfigData, record: RecordModel, articleId: string, syncState: FigshareSyncState): Promise<FigsharePublishResult>;
5
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGhF,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgB7M"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.publishIfNeededPhase = publishIfNeededPhase;
4
+ const config_1 = require("./config");
5
+ async function publishIfNeededPhase(client, config, record, articleId, syncState) {
6
+ if (config.article.publishMode === 'manual') {
7
+ return {};
8
+ }
9
+ const attachmentCount = Number(syncState.partialProgress?.attachmentCount ?? 0);
10
+ const uploadsComplete = syncState.partialProgress?.uploadsComplete === true;
11
+ if (attachmentCount > 0 && config.article.publishMode === 'afterUploadsComplete') {
12
+ syncState.status = 'awaiting_upload_completion';
13
+ (0, config_1.setSyncState)(config, record, syncState);
14
+ if (!uploadsComplete) {
15
+ return {};
16
+ }
17
+ }
18
+ return client.publishArticle(articleId, {});
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9wdWJsaXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esb0RBZ0JDO0FBbEJELHFDQUF3QztBQUVqQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBc0IsRUFBRSxNQUFvQyxFQUFFLE1BQW1CLEVBQUUsU0FBaUIsRUFBRSxTQUE0QjtJQUMzSyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLGVBQWUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNoRixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsZUFBZSxFQUFFLGVBQWUsS0FBSyxJQUFJLENBQUM7SUFDNUUsSUFBSSxlQUFlLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLHNCQUFzQixFQUFFLENBQUM7UUFDakYsU0FBUyxDQUFDLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQztRQUNoRCxJQUFBLHFCQUFZLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ import { FigshareJobData, UserModel } from './types';
2
+ export declare function buildPublishAfterUploadsMessage(oid: string, articleId: string, user: UserModel, brandId: string): FigshareJobData;
3
+ export declare function buildDeleteFilesMessage(oid: string, user: UserModel, brandId: string, articleId: string): FigshareJobData;
4
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAErD,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAEjI;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAEzH"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPublishAfterUploadsMessage = buildPublishAfterUploadsMessage;
4
+ exports.buildDeleteFilesMessage = buildDeleteFilesMessage;
5
+ function buildPublishAfterUploadsMessage(oid, articleId, user, brandId) {
6
+ return { oid, articleId, user, brandId };
7
+ }
8
+ function buildDeleteFilesMessage(oid, user, brandId, articleId) {
9
+ return { oid, user, brandId, articleId };
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZmlnc2hhcmUtdjIvcXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSwwRUFFQztBQUVELDBEQUVDO0FBTkQsU0FBZ0IsK0JBQStCLENBQUMsR0FBVyxFQUFFLFNBQWlCLEVBQUUsSUFBZSxFQUFFLE9BQWU7SUFDOUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxHQUFXLEVBQUUsSUFBZSxFQUFFLE9BQWUsRUFBRSxTQUFpQjtJQUN0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDM0MsQ0FBQyJ9
@@ -0,0 +1,11 @@
1
+ import { Context, Layer } from 'effect';
2
+ import { ResolvedFigsharePublishingConfigData } from './config';
3
+ import { FigshareClient } from './http';
4
+ import { FigshareArticle, FigsharePublicationPlan, FigshareRunContext, RecordModel } from './types';
5
+ export declare const FigshareConfigTag: Context.Tag<ResolvedFigsharePublishingConfigData, ResolvedFigsharePublishingConfigData>;
6
+ export declare const FigshareRunContextTag: Context.Tag<FigshareRunContext, FigshareRunContext>;
7
+ export declare function makeRuntimeLayer(config: ResolvedFigsharePublishingConfigData, runContext: FigshareRunContext): Layer.Layer<FigshareRunContext | ResolvedFigsharePublishingConfigData | FigshareClient, never, never>;
8
+ export declare function runBuildMetadataPayload(config: ResolvedFigsharePublishingConfigData, record: RecordModel): Promise<Record<string, unknown>>;
9
+ export declare function runSyncMetadataProgram(config: ResolvedFigsharePublishingConfigData, runContext: FigshareRunContext, record: RecordModel, plan: FigsharePublicationPlan): Promise<FigshareArticle>;
10
+ export declare function runSyncRecordProgram(config: ResolvedFigsharePublishingConfigData, runContext: FigshareRunContext, record: RecordModel, plan: FigsharePublicationPlan): Promise<RecordModel>;
11
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AAIhD,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAmB,cAAc,EAAqB,MAAM,QAAQ,CAAC;AAI5E,OAAO,EAAE,eAAe,EAAgB,uBAAuB,EAAE,kBAAkB,EAAqB,WAAW,EAAkB,MAAM,SAAS,CAAC;AAErJ,eAAO,MAAM,iBAAiB,yFAAoF,CAAC;AACnH,eAAO,MAAM,qBAAqB,qDAAsE,CAAC;AA6CzG,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oCAAoC,EAAE,UAAU,EAAE,kBAAkB,yGAM5G;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,oCAAoC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAajJ;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,oCAAoC,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC,CAcvM;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oCAAoC,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAyBjM"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FigshareRunContextTag = exports.FigshareConfigTag = void 0;
4
+ exports.makeRuntimeLayer = makeRuntimeLayer;
5
+ exports.runBuildMetadataPayload = runBuildMetadataPayload;
6
+ exports.runSyncMetadataProgram = runSyncMetadataProgram;
7
+ exports.runSyncRecordProgram = runSyncRecordProgram;
8
+ const effect_1 = require("effect");
9
+ const RBValidationError_1 = require("../../model/RBValidationError");
10
+ const assets_1 = require("./assets");
11
+ const embargo_1 = require("./embargo");
12
+ const http_1 = require("./http");
13
+ const metadata_1 = require("./metadata");
14
+ const publish_1 = require("./publish");
15
+ const writeback_1 = require("./writeback");
16
+ const types_1 = require("./types");
17
+ exports.FigshareConfigTag = effect_1.Context.GenericTag('redbox/FigshareConfig');
18
+ exports.FigshareRunContextTag = effect_1.Context.GenericTag('redbox/FigshareRunContext');
19
+ function isCurationLocked(config, article) {
20
+ const curationLock = config.article.curationLock;
21
+ const statusField = curationLock?.statusField ?? '';
22
+ const targetValue = curationLock?.targetValue ?? 'public';
23
+ const updatesDisabled = curationLock?.enabled === true;
24
+ if (!updatesDisabled || statusField === '') {
25
+ return false;
26
+ }
27
+ return String(article[statusField] ?? '') === targetValue;
28
+ }
29
+ async function listArticleFiles(client, articleId) {
30
+ const files = [];
31
+ let page = 1;
32
+ const pageSize = 20;
33
+ while (true) {
34
+ const pageResults = await client.listArticleFiles(articleId, page, pageSize);
35
+ if (!Array.isArray(pageResults) || pageResults.length === 0) {
36
+ break;
37
+ }
38
+ files.push(...pageResults);
39
+ if (pageResults.length < pageSize) {
40
+ break;
41
+ }
42
+ page++;
43
+ }
44
+ return files;
45
+ }
46
+ async function ensureNoFileUploadInProgress(client, articleId) {
47
+ const files = await listArticleFiles(client, articleId);
48
+ const inProgress = files.some((entry) => String(entry.status ?? '').toLowerCase() === 'created');
49
+ if (inProgress) {
50
+ throw new RBValidationError_1.RBValidationError({
51
+ message: `Figshare file uploads are still in progress for article '${articleId}'`,
52
+ displayErrors: [{
53
+ title: 'Figshare file uploads are still in progress',
54
+ detail: `Figshare file uploads are still in progress for article '${articleId}'`
55
+ }]
56
+ });
57
+ }
58
+ }
59
+ function makeRuntimeLayer(config, runContext) {
60
+ return effect_1.Layer.mergeAll(effect_1.Layer.succeed(exports.FigshareConfigTag, config), effect_1.Layer.succeed(exports.FigshareRunContextTag, runContext), (0, http_1.makeClientLayer)(config, runContext));
61
+ }
62
+ async function runBuildMetadataPayload(config, record) {
63
+ const runContext = {
64
+ recordOid: record.redboxOid ?? record.id ?? '',
65
+ brandName: record.metaMetadata?.brandId ?? 'default',
66
+ correlationId: `build-${Date.now()}`,
67
+ triggerSource: 'buildMetadataPayload'
68
+ };
69
+ const program = effect_1.Effect.gen(function* () {
70
+ const client = yield* http_1.FigshareClientTag;
71
+ return yield* effect_1.Effect.promise(() => (0, metadata_1.buildMetadataPayload)(config, record, client));
72
+ }).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
73
+ return effect_1.Effect.runPromise(program);
74
+ }
75
+ async function runSyncMetadataProgram(config, runContext, record, plan) {
76
+ const program = effect_1.Effect.gen(function* () {
77
+ const client = yield* http_1.FigshareClientTag;
78
+ if (plan.articleId) {
79
+ const currentArticle = yield* effect_1.Effect.promise(() => client.getArticle(String(plan.articleId)));
80
+ if (isCurationLocked(config, currentArticle)) {
81
+ return currentArticle;
82
+ }
83
+ yield* effect_1.Effect.promise(() => ensureNoFileUploadInProgress(client, String(plan.articleId)));
84
+ }
85
+ return yield* effect_1.Effect.promise(() => (0, metadata_1.syncMetadataPhase)(client, config, record, plan));
86
+ }).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
87
+ return effect_1.Effect.runPromise(program);
88
+ }
89
+ async function runSyncRecordProgram(config, runContext, record, plan) {
90
+ const rm = record;
91
+ const program = effect_1.Effect.gen(function* () {
92
+ const client = yield* http_1.FigshareClientTag;
93
+ let article;
94
+ if (plan.articleId) {
95
+ const currentArticle = yield* effect_1.Effect.promise(() => client.getArticle(String(plan.articleId)));
96
+ if (isCurationLocked(config, currentArticle)) {
97
+ article = currentArticle;
98
+ }
99
+ else {
100
+ yield* effect_1.Effect.promise(() => ensureNoFileUploadInProgress(client, String(plan.articleId)));
101
+ article = yield* effect_1.Effect.promise(() => (0, metadata_1.syncMetadataPhase)(client, config, rm, plan));
102
+ }
103
+ }
104
+ else {
105
+ article = yield* effect_1.Effect.promise(() => (0, metadata_1.syncMetadataPhase)(client, config, rm, plan));
106
+ }
107
+ const syncState = ((0, types_1.getRecordField)(rm, config.record.syncStatePath) ?? { status: 'idle' });
108
+ const assetSyncResult = yield* effect_1.Effect.promise(() => (0, assets_1.syncAssetsPhase)(client, config, rm, article, syncState));
109
+ yield* effect_1.Effect.promise(() => (0, embargo_1.syncEmbargoPhase)(client, config, rm, String(article?.id ?? plan.articleId ?? '')));
110
+ const publishResult = yield* effect_1.Effect.promise(() => (0, publish_1.publishIfNeededPhase)(client, config, rm, String(article?.id ?? plan.articleId ?? ''), syncState));
111
+ const writeBackArticle = Object.keys(publishResult).length === 0 ? article : yield* effect_1.Effect.promise(() => client.getArticle(String(article?.id ?? plan.articleId ?? '')));
112
+ return (0, writeback_1.writeBackPhase)(config, rm, writeBackArticle, publishResult, assetSyncResult);
113
+ }).pipe(effect_1.Effect.provide(makeRuntimeLayer(config, runContext)));
114
+ return effect_1.Effect.runPromise(program);
115
+ }
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maWdzaGFyZS12Mi9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJEQSw0Q0FNQztBQUVELDBEQWFDO0FBRUQsd0RBY0M7QUFFRCxvREF5QkM7QUExSEQsbUNBQWdEO0FBRWhELHFFQUFrRTtBQUNsRSxxQ0FBMkM7QUFFM0MsdUNBQTZDO0FBQzdDLGlDQUE0RTtBQUM1RSx5Q0FBcUU7QUFDckUsdUNBQWlEO0FBQ2pELDJDQUE2QztBQUM3QyxtQ0FBcUo7QUFFeEksUUFBQSxpQkFBaUIsR0FBRyxnQkFBTyxDQUFDLFVBQVUsQ0FBdUMsdUJBQXVCLENBQUMsQ0FBQztBQUN0RyxRQUFBLHFCQUFxQixHQUFHLGdCQUFPLENBQUMsVUFBVSxDQUFxQiwyQkFBMkIsQ0FBQyxDQUFDO0FBRXpHLFNBQVMsZ0JBQWdCLENBQUMsTUFBb0MsRUFBRSxPQUF3QjtJQUN0RixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUNqRCxNQUFNLFdBQVcsR0FBRyxZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNwRCxNQUFNLFdBQVcsR0FBRyxZQUFZLEVBQUUsV0FBVyxJQUFJLFFBQVEsQ0FBQztJQUMxRCxNQUFNLGVBQWUsR0FBRyxZQUFZLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQztJQUN2RCxJQUFJLENBQUMsZUFBZSxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMzQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBRSxPQUFtQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQztBQUN6RixDQUFDO0FBRUQsS0FBSyxVQUFVLGdCQUFnQixDQUFDLE1BQXNCLEVBQUUsU0FBaUI7SUFDdkUsTUFBTSxLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUNqQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDcEIsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNO1FBQ1IsQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUMzQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTTtRQUNSLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQztJQUNULENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsNEJBQTRCLENBQUMsTUFBc0IsRUFBRSxTQUFpQjtJQUNuRixNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUNqRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLHFDQUFpQixDQUFDO1lBQzFCLE9BQU8sRUFBRSw0REFBNEQsU0FBUyxHQUFHO1lBQ2pGLGFBQWEsRUFBRSxDQUFDO29CQUNkLEtBQUssRUFBRSw2Q0FBNkM7b0JBQ3BELE1BQU0sRUFBRSw0REFBNEQsU0FBUyxHQUFHO2lCQUNqRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUE0QyxFQUFFLFVBQThCO0lBQzNHLE9BQU8sY0FBSyxDQUFDLFFBQVEsQ0FDbkIsY0FBSyxDQUFDLE9BQU8sQ0FBQyx5QkFBaUIsRUFBRSxNQUFNLENBQUMsRUFDeEMsY0FBSyxDQUFDLE9BQU8sQ0FBQyw2QkFBcUIsRUFBRSxVQUFVLENBQUMsRUFDaEQsSUFBQSxzQkFBZSxFQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FDcEMsQ0FBQztBQUNKLENBQUM7QUFFTSxLQUFLLFVBQVUsdUJBQXVCLENBQUMsTUFBNEMsRUFBRSxNQUFtQjtJQUM3RyxNQUFNLFVBQVUsR0FBdUI7UUFDckMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFO1FBQzlDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sSUFBSSxTQUFTO1FBQ3BELGFBQWEsRUFBRSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQyxhQUFhLEVBQUUsc0JBQXNCO0tBQ3RDLENBQUM7SUFDRixNQUFNLE9BQU8sR0FBRyxlQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyx3QkFBaUIsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQyxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBb0IsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RCxPQUFPLGVBQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVNLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxNQUE0QyxFQUFFLFVBQThCLEVBQUUsTUFBbUIsRUFBRSxJQUE2QjtJQUMzSyxNQUFNLE9BQU8sR0FBRyxlQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyx3QkFBaUIsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxlQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUYsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxjQUFjLENBQUM7WUFDeEIsQ0FBQztZQUNELEtBQUssQ0FBQyxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw0QkFBaUIsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQsT0FBTyxlQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBNEMsRUFBRSxVQUE4QixFQUFFLE1BQW1CLEVBQUUsSUFBNkI7SUFDekssTUFBTSxFQUFFLEdBQUcsTUFBcUIsQ0FBQztJQUNqQyxNQUFNLE9BQU8sR0FBRyxlQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyx3QkFBaUIsQ0FBQztRQUN4QyxJQUFJLE9BQXdCLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsZUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE9BQU8sR0FBRyxjQUFjLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsZUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDRCQUFpQixFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckYsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSw0QkFBaUIsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUEsc0JBQWMsRUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBc0IsQ0FBQztRQUMvRyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyxlQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsd0JBQWUsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3RyxLQUFLLENBQUMsQ0FBQyxlQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsMEJBQWdCLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0csTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsZUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDhCQUFvQixFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNwSixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekssT0FBTyxJQUFBLDBCQUFjLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RCxPQUFPLGVBQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEMsQ0FBQyJ9