@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.
- package/dist/IntegrationAuditParams.d.ts +11 -0
- package/dist/IntegrationAuditParams.d.ts.map +1 -0
- package/dist/IntegrationAuditParams.js +14 -0
- package/dist/RecordAuditParams.d.ts +2 -0
- package/dist/RecordAuditParams.d.ts.map +1 -1
- package/dist/RecordAuditParams.js +3 -1
- package/dist/RecordsService.d.ts +14 -0
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +3 -0
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +10 -1
- package/dist/config/auth.config.d.ts.map +1 -1
- package/dist/config/auth.config.js +2 -1
- package/dist/config/brandingConfigurationDefaults.config.d.ts +3 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +154 -3
- package/dist/config/figshareDev.config.d.ts +12 -0
- package/dist/config/figshareDev.config.d.ts.map +1 -0
- package/dist/config/figshareDev.config.js +9 -0
- package/dist/config/index.d.ts +4 -16
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -13
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +17 -1
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +47 -43
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +3 -2
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts +48 -0
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -1
- package/dist/configmodels/AuthorizedDomainsEmails.js +50 -2
- package/dist/configmodels/ConfigModels.d.ts +7 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +25 -1
- package/dist/configmodels/DoiPublishing.d.ts +4711 -0
- package/dist/configmodels/DoiPublishing.d.ts.map +1 -0
- package/dist/configmodels/DoiPublishing.js +639 -0
- package/dist/configmodels/FigsharePublishing.d.ts +1376 -0
- package/dist/configmodels/FigsharePublishing.d.ts.map +1 -0
- package/dist/configmodels/FigsharePublishing.js +630 -0
- package/dist/configmodels/SystemMessage.d.ts +32 -0
- package/dist/configmodels/SystemMessage.d.ts.map +1 -1
- package/dist/configmodels/SystemMessage.js +34 -2
- package/dist/controllers/AppConfigController.js +3 -3
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
- package/dist/controllers/FormVocabularyController.js +4 -1
- package/dist/controllers/RecordAuditController.d.ts +29 -14
- package/dist/controllers/RecordAuditController.d.ts.map +1 -1
- package/dist/controllers/RecordAuditController.js +455 -57
- package/dist/controllers/RecordController.d.ts +1 -16
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +20 -39
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +4 -1
- package/dist/controllers/webservice/AppConfigController.js +3 -3
- package/dist/controllers/webservice/IntegrationAuditController.d.ts +10 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -0
- package/dist/controllers/webservice/IntegrationAuditController.js +98 -0
- package/dist/form-config/default-1.0-draft.d.ts.map +1 -1
- package/dist/form-config/default-1.0-draft.js +26 -2
- package/dist/form-config/index.d.ts.map +1 -1
- package/dist/form-config/index.js +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/model/storage/IntegrationAuditModel.d.ts +47 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -0
- package/dist/model/storage/IntegrationAuditModel.js +104 -0
- package/dist/model/storage/index.d.ts +1 -0
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +7 -2
- package/dist/services/AppConfigService.d.ts +20 -2
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +129 -15
- package/dist/services/DoiService.d.ts +19 -25
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +258 -408
- package/dist/services/FigshareService.d.ts +35 -65
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +477 -2056
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +4 -2
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +4 -2
- package/dist/services/IntegrationAuditService.d.ts +100 -0
- package/dist/services/IntegrationAuditService.d.ts.map +1 -0
- package/dist/services/IntegrationAuditService.js +561 -0
- package/dist/services/RecordsService.d.ts +16 -0
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +54 -2
- package/dist/services/SolrSearchService.d.ts +1 -0
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +14 -3
- package/dist/services/VocabularyService.d.ts +1 -0
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +4 -1
- package/dist/services/doi-v2/audit.d.ts +7 -0
- package/dist/services/doi-v2/audit.d.ts.map +1 -0
- package/dist/services/doi-v2/audit.js +30 -0
- package/dist/services/doi-v2/bindings.d.ts +8 -0
- package/dist/services/doi-v2/bindings.d.ts.map +1 -0
- package/dist/services/doi-v2/bindings.js +85 -0
- package/dist/services/doi-v2/config.d.ts +7 -0
- package/dist/services/doi-v2/config.d.ts.map +1 -0
- package/dist/services/doi-v2/config.js +51 -0
- package/dist/services/doi-v2/context.d.ts +18 -0
- package/dist/services/doi-v2/context.d.ts.map +1 -0
- package/dist/services/doi-v2/context.js +41 -0
- package/dist/services/doi-v2/http.d.ts +21 -0
- package/dist/services/doi-v2/http.d.ts.map +1 -0
- package/dist/services/doi-v2/http.js +88 -0
- package/dist/services/doi-v2/payload.d.ts +4 -0
- package/dist/services/doi-v2/payload.d.ts.map +1 -0
- package/dist/services/doi-v2/payload.js +291 -0
- package/dist/services/doi-v2/profiles.d.ts +5 -0
- package/dist/services/doi-v2/profiles.d.ts.map +1 -0
- package/dist/services/doi-v2/profiles.js +31 -0
- package/dist/services/doi-v2/runtime.d.ts +16 -0
- package/dist/services/doi-v2/runtime.d.ts.map +1 -0
- package/dist/services/doi-v2/runtime.js +173 -0
- package/dist/services/doi-v2/types.d.ts +49 -0
- package/dist/services/doi-v2/types.d.ts.map +1 -0
- package/dist/services/doi-v2/types.js +3 -0
- package/dist/services/figshare-v2/assets.d.ts +5 -0
- package/dist/services/figshare-v2/assets.d.ts.map +1 -0
- package/dist/services/figshare-v2/assets.js +297 -0
- package/dist/services/figshare-v2/bindings.d.ts +6 -0
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -0
- package/dist/services/figshare-v2/bindings.js +60 -0
- package/dist/services/figshare-v2/config.d.ts +13 -0
- package/dist/services/figshare-v2/config.d.ts.map +1 -0
- package/dist/services/figshare-v2/config.js +81 -0
- package/dist/services/figshare-v2/context.d.ts +4 -0
- package/dist/services/figshare-v2/context.d.ts.map +1 -0
- package/dist/services/figshare-v2/context.js +20 -0
- package/dist/services/figshare-v2/embargo.d.ts +5 -0
- package/dist/services/figshare-v2/embargo.d.ts.map +1 -0
- package/dist/services/figshare-v2/embargo.js +36 -0
- package/dist/services/figshare-v2/http.d.ts +25 -0
- package/dist/services/figshare-v2/http.d.ts.map +1 -0
- package/dist/services/figshare-v2/http.js +270 -0
- package/dist/services/figshare-v2/metadata.d.ts +6 -0
- package/dist/services/figshare-v2/metadata.d.ts.map +1 -0
- package/dist/services/figshare-v2/metadata.js +221 -0
- package/dist/services/figshare-v2/observability.d.ts +7 -0
- package/dist/services/figshare-v2/observability.d.ts.map +1 -0
- package/dist/services/figshare-v2/observability.js +85 -0
- package/dist/services/figshare-v2/plan.d.ts +5 -0
- package/dist/services/figshare-v2/plan.d.ts.map +1 -0
- package/dist/services/figshare-v2/plan.js +51 -0
- package/dist/services/figshare-v2/publish.d.ts +5 -0
- package/dist/services/figshare-v2/publish.d.ts.map +1 -0
- package/dist/services/figshare-v2/publish.js +20 -0
- package/dist/services/figshare-v2/queue.d.ts +4 -0
- package/dist/services/figshare-v2/queue.d.ts.map +1 -0
- package/dist/services/figshare-v2/queue.js +11 -0
- package/dist/services/figshare-v2/runtime.d.ts +11 -0
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -0
- package/dist/services/figshare-v2/runtime.js +116 -0
- package/dist/services/figshare-v2/types.d.ts +194 -0
- package/dist/services/figshare-v2/types.d.ts.map +1 -0
- package/dist/services/figshare-v2/types.js +37 -0
- package/dist/services/figshare-v2/workflow.d.ts +3 -0
- package/dist/services/figshare-v2/workflow.d.ts.map +1 -0
- package/dist/services/figshare-v2/workflow.js +7 -0
- package/dist/services/figshare-v2/writeback.d.ts +5 -0
- package/dist/services/figshare-v2/writeback.d.ts.map +1 -0
- package/dist/services/figshare-v2/writeback.js +45 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +7 -2
- package/dist/visitor/client.visitor.d.ts +3 -0
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +8 -1
- package/dist/visitor/construct.visitor.d.ts +3 -0
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +95 -70
- package/dist/visitor/data-value.visitor.d.ts +3 -0
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +5 -1
- package/dist/visitor/json-type-def.visitor.d.ts +3 -0
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +5 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +3 -0
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +77 -64
- package/dist/visitor/template.visitor.d.ts +3 -0
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +5 -1
- package/dist/visitor/validator.visitor.d.ts +3 -1
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +6 -1
- package/dist/visitor/vocab-inline.visitor.d.ts +16 -1
- package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
- package/dist/visitor/vocab-inline.visitor.js +109 -14
- package/package.json +23 -16
- package/dist/config/datacite.config.d.ts +0 -51
- package/dist/config/datacite.config.d.ts.map +0 -1
- package/dist/config/datacite.config.js +0 -44
- package/dist/config/figshareAPI.config.d.ts +0 -116
- package/dist/config/figshareAPI.config.d.ts.map +0 -1
- package/dist/config/figshareAPI.config.js +0 -857
- package/dist/config/figshareAPIEnv.config.d.ts +0 -11
- package/dist/config/figshareAPIEnv.config.d.ts.map +0 -1
- package/dist/config/figshareAPIEnv.config.js +0 -13
- package/dist/config/figshareRedboxFORMapping.config.d.ts +0 -15
- package/dist/config/figshareRedboxFORMapping.config.d.ts.map +0 -1
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZmlnc2hhcmUtdjIvbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE4S0Esb0RBdUVDO0FBRUQsOENBVUM7QUFqUUQsb0RBQXVCO0FBRXZCLHFFQUFrRTtBQUVsRSxtQ0FTaUI7QUFDakIseUNBQTZDO0FBRTdDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7QUFFbEUsU0FBUyxlQUFlLENBQUMsT0FBZTtJQUN0QyxPQUFPLElBQUkscUNBQWlCLENBQUM7UUFDM0IsT0FBTztRQUNQLGFBQWEsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDckQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsTUFBb0MsRUFBRSxNQUFtQjtJQUN2RixNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDbkgsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO1FBQ2pDLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLG1DQUFtQyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDbEosTUFBTSxZQUFZLEdBQUcsZ0JBQWdCO1NBQ2xDLE9BQU8sQ0FBQyxDQUFDLGVBQXVCLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFBLHNCQUFjLEVBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckUsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQXdCLENBQUM7SUFDMUgsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsTUFBb0MsRUFBRSxPQUFlLEVBQUUsS0FBYTtJQUN0RyxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsSUFBSSxVQUFVLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdEIsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BFLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0QsSUFBSSxNQUFNLEtBQUssRUFBRSxJQUFJLFNBQVMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDdkUsVUFBVSxHQUFHLEdBQUcsTUFBTSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFDRCxJQUFJLGNBQWMsS0FBSyxFQUFFLElBQUksU0FBUyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQzVELFVBQVUsR0FBRyxHQUFHLGFBQWEsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUFzQixFQUFFLE1BQW9DLEVBQUUsTUFBbUI7SUFDN0csTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLE1BQU07UUFDM0QsQ0FBQyxDQUFDLFlBQVk7UUFDZCxDQUFDLENBQUMsZ0JBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVwRixNQUFNLGVBQWUsR0FBbUQsRUFBRSxDQUFDO0lBQzNFLEtBQUssTUFBTSxXQUFXLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUN2RixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDcEIsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSwwQkFBZSxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBc0MsQ0FBQyxDQUFDO1lBQzNGLE1BQU0sS0FBSyxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNuSCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNsQyxTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFpQyxNQUFNLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEgsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksVUFBVSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDZixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztZQUNySCxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNoRCxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE9BQXVFLEVBQUUsUUFBZ0IsRUFBRSxPQUF3QjtJQUN6SSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakQsSUFBSSxVQUFVLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDN0IsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FBQztJQUN2RixDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUYsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxLQUFLLFVBQVUsY0FBYyxDQUFDLE1BQXNCLEVBQUUsTUFBb0MsRUFBRSxNQUFtQjtJQUM3RyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUEsMEJBQWUsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBaUMsQ0FBQyxDQUFDO0lBQzlHLElBQUksWUFBWSxJQUFJLElBQUksSUFBSSxZQUFZLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDaEQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVFLElBQUksaUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNELElBQUksaUJBQWlCLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsaUJBQWlCLEdBQUcsTUFBTSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxNQUFNLGVBQWUsQ0FBQyx1Q0FBdUMsWUFBWSxpREFBaUQsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNqRCxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDL0UsQ0FBQztJQUNGLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sZUFBZSxDQUFDLHVDQUF1QyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxZQUFZLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE1BQW9DLEVBQUUsT0FBK0I7SUFDNUYsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3BELE1BQU0sZUFBZSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEUsTUFBTSxlQUFlLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUMzQyxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN2RCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsTUFBTSxlQUFlLENBQUMsMEJBQTBCLFdBQVcsQ0FBQyxhQUFhLGVBQWUsQ0FBQyxDQUFDO1lBQzVGLENBQUM7WUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEksTUFBTSxlQUFlLENBQUMsMEJBQTBCLFdBQVcsQ0FBQyxhQUFhLHdCQUF3QixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2SCxDQUFDO1lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDM0csTUFBTSxlQUFlLENBQUMsMEJBQTBCLFdBQVcsQ0FBQyxhQUFhLGlCQUFpQixDQUFDLENBQUM7WUFDOUYsQ0FBQztZQUNELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUcsTUFBTSxlQUFlLENBQUMsMEJBQTBCLFdBQVcsQ0FBQyxhQUFhLGlCQUFpQixDQUFDLENBQUM7WUFDOUYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxNQUFvQyxFQUFFLE1BQW1CLEVBQUUsTUFBdUI7SUFDM0gsTUFBTSxVQUFVLEdBQUcsTUFBaUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBMkI7UUFDdEMsS0FBSyxFQUFFLE1BQU0sSUFBQSwwQkFBZSxFQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztRQUMvRCxXQUFXLEVBQUUsTUFBTSxJQUFBLDBCQUFlLEVBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1FBQzNFLFFBQVEsRUFBRSxNQUFNLElBQUEsMEJBQWUsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7UUFDckUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUTtLQUN0QyxDQUFDO0lBRUYsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsMEJBQWUsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRSxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsMEJBQWUsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUYsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEgsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUNwRSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUk7UUFDdEMsQ0FBQyxDQUFDLE1BQU0sQ0FBRSxJQUFnQyxDQUFDLFFBQVEsSUFBSyxJQUFnQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDakIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVztTQUNqQyxHQUFHLENBQUMsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FDMUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxFQUFFLGtCQUFrQixDQUNwRztTQUNBLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBbUIsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNyRCxPQUFPLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDO0lBRXRDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEcsTUFBTSxlQUFlLENBQUMsOERBQThELENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLElBQUk7UUFDakMsQ0FBQyxDQUFDLE1BQU0sSUFBQSwwQkFBZSxFQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7UUFDbkUsQ0FBQyxDQUFDLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakQsSUFBSSxZQUFZLElBQUksSUFBSSxJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNoRCxPQUFPLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBQSwwQkFBZSxFQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUEsMEJBQWUsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEgsSUFBSSxZQUFZLEtBQUssRUFBRSxJQUFJLGlCQUFpQixLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxDQUFDO29CQUMzQixLQUFLLEVBQUUsWUFBWTtvQkFDbkIsVUFBVSxFQUFFLGlCQUFpQjtpQkFDOUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLG1CQUFtQixHQUE0QixFQUFFLENBQUM7UUFDeEQsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZELG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLElBQUEsMEJBQWUsRUFBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxPQUFPLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDO0lBQzlDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFTSxLQUFLLFVBQVUsaUJBQWlCLENBQUMsTUFBc0IsRUFBRSxNQUFvQyxFQUFFLE1BQW1CLEVBQUUsSUFBNkI7SUFDdEosTUFBTSxPQUFPLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RELElBQUksU0FBUyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sZUFBZSxDQUFDLGdFQUFnRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxDQUFDIn0=
|
|
@@ -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
|