@researchdatabox/redbox-core 5.0.4-beta.12498 → 5.1.0-beta.12568

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 (101) hide show
  1. package/dist/DatastreamService.d.ts +2 -0
  2. package/dist/DatastreamService.d.ts.map +1 -1
  3. package/dist/QueueService.d.ts +1 -1
  4. package/dist/QueueService.d.ts.map +1 -1
  5. package/dist/RecordStorageConcurrency.d.ts +2 -1
  6. package/dist/RecordStorageConcurrency.d.ts.map +1 -1
  7. package/dist/RecordStorageConcurrency.js +1 -1
  8. package/dist/RecordWriteOptions.d.ts +21 -0
  9. package/dist/RecordWriteOptions.d.ts.map +1 -0
  10. package/dist/RecordWriteOptions.js +17 -0
  11. package/dist/RecordsService.d.ts +5 -0
  12. package/dist/RecordsService.d.ts.map +1 -1
  13. package/dist/RecordsService.js +1 -1
  14. package/dist/StorageService.d.ts +12 -0
  15. package/dist/StorageService.d.ts.map +1 -1
  16. package/dist/StorageService.js +1 -1
  17. package/dist/api-routes/schemas/responses.d.ts +1 -1
  18. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  19. package/dist/config/agendaQueue.config.js +10 -1
  20. package/dist/config/i18n.config.d.ts +4 -0
  21. package/dist/config/i18n.config.d.ts.map +1 -1
  22. package/dist/config/i18n.config.js +1 -1
  23. package/dist/configmodels/FigsharePublishing.d.ts +103 -0
  24. package/dist/configmodels/FigsharePublishing.d.ts.map +1 -1
  25. package/dist/configmodels/FigsharePublishing.js +36 -2
  26. package/dist/controllers/RecordAuditController.d.ts.map +1 -1
  27. package/dist/controllers/RecordAuditController.js +24 -6
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -1
  31. package/dist/model/storage/FigshareSyncModel.d.ts +126 -0
  32. package/dist/model/storage/FigshareSyncModel.d.ts.map +1 -0
  33. package/dist/model/storage/FigshareSyncModel.js +3 -0
  34. package/dist/model/storage/RecordAuditModel.d.ts +3 -0
  35. package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
  36. package/dist/model/storage/RecordAuditModel.js +29 -1
  37. package/dist/model/storage/RecordModel.d.ts +3 -0
  38. package/dist/model/storage/RecordModel.d.ts.map +1 -1
  39. package/dist/services/AgendaQueueService.d.ts +1 -1
  40. package/dist/services/AgendaQueueService.d.ts.map +1 -1
  41. package/dist/services/AgendaQueueService.js +7 -4
  42. package/dist/services/FigshareService.d.ts +15 -10
  43. package/dist/services/FigshareService.d.ts.map +1 -1
  44. package/dist/services/FigshareService.js +76 -576
  45. package/dist/services/I18nEntriesService.d.ts +13 -12
  46. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  47. package/dist/services/I18nEntriesService.js +103 -65
  48. package/dist/services/RecordsService.d.ts +5 -1
  49. package/dist/services/RecordsService.d.ts.map +1 -1
  50. package/dist/services/RecordsService.js +77 -23
  51. package/dist/services/StandardDatastreamService.d.ts +5 -0
  52. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  53. package/dist/services/StandardDatastreamService.js +18 -1
  54. package/dist/services/figshare-v2/admin.d.ts +16 -0
  55. package/dist/services/figshare-v2/admin.d.ts.map +1 -0
  56. package/dist/services/figshare-v2/admin.js +283 -0
  57. package/dist/services/figshare-v2/assets.d.ts +20 -1
  58. package/dist/services/figshare-v2/assets.d.ts.map +1 -1
  59. package/dist/services/figshare-v2/assets.js +16 -1
  60. package/dist/services/figshare-v2/config.d.ts +8 -2
  61. package/dist/services/figshare-v2/config.d.ts.map +1 -1
  62. package/dist/services/figshare-v2/config.js +31 -3
  63. package/dist/services/figshare-v2/execution.d.ts +25 -0
  64. package/dist/services/figshare-v2/execution.d.ts.map +1 -0
  65. package/dist/services/figshare-v2/execution.js +49 -0
  66. package/dist/services/figshare-v2/http.d.ts +6 -1
  67. package/dist/services/figshare-v2/http.d.ts.map +1 -1
  68. package/dist/services/figshare-v2/http.js +69 -12
  69. package/dist/services/figshare-v2/identity.d.ts +12 -0
  70. package/dist/services/figshare-v2/identity.d.ts.map +1 -0
  71. package/dist/services/figshare-v2/identity.js +78 -0
  72. package/dist/services/figshare-v2/managed-assets.d.ts +9 -0
  73. package/dist/services/figshare-v2/managed-assets.d.ts.map +1 -0
  74. package/dist/services/figshare-v2/managed-assets.js +229 -0
  75. package/dist/services/figshare-v2/plan.d.ts.map +1 -1
  76. package/dist/services/figshare-v2/plan.js +2 -9
  77. package/dist/services/figshare-v2/source-intent.d.ts +9 -0
  78. package/dist/services/figshare-v2/source-intent.d.ts.map +1 -0
  79. package/dist/services/figshare-v2/source-intent.js +93 -0
  80. package/dist/services/figshare-v2/status.d.ts +4 -0
  81. package/dist/services/figshare-v2/status.d.ts.map +1 -0
  82. package/dist/services/figshare-v2/status.js +29 -0
  83. package/dist/services/figshare-v2/sync-store.d.ts +27 -0
  84. package/dist/services/figshare-v2/sync-store.d.ts.map +1 -0
  85. package/dist/services/figshare-v2/sync-store.js +139 -0
  86. package/dist/services/figshare-v2/types.d.ts +3 -0
  87. package/dist/services/figshare-v2/types.d.ts.map +1 -1
  88. package/dist/services/figshare-v2/types.js +1 -1
  89. package/dist/services/figshare-v2/worker.d.ts +16 -0
  90. package/dist/services/figshare-v2/worker.d.ts.map +1 -0
  91. package/dist/services/figshare-v2/worker.js +752 -0
  92. package/dist/utilities/TranslationHtml.d.ts +3 -0
  93. package/dist/utilities/TranslationHtml.d.ts.map +1 -0
  94. package/dist/utilities/TranslationHtml.js +46 -0
  95. package/dist/waterline-models/FigshareSync.d.ts +41 -0
  96. package/dist/waterline-models/FigshareSync.d.ts.map +1 -0
  97. package/dist/waterline-models/FigshareSync.js +168 -0
  98. package/dist/waterline-models/index.d.ts +2 -0
  99. package/dist/waterline-models/index.d.ts.map +1 -1
  100. package/dist/waterline-models/index.js +4 -1
  101. package/package.json +9 -8
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.figshareAdmin = figshareAdmin;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const types_1 = require("./types");
6
+ const worker_1 = require("./worker");
7
+ const config_1 = require("./config");
8
+ const context_1 = require("./context");
9
+ const http_1 = require("./http");
10
+ const identity_1 = require("./identity");
11
+ const execution_1 = require("./execution");
12
+ const runtime_1 = require("./runtime");
13
+ /** Operators use application identities/configuration; no direct DB edits or remote writes. */
14
+ async function figshareAdmin(options, internal = {}) {
15
+ const actor = await UsersService.getUserWithUsername(options.username).toPromise();
16
+ if (!actor || actor.disabled === true || !RolesService.getAdminFromRoles(actor.roles ?? []))
17
+ throw new Error('A current ReDBox administrator is required');
18
+ const store = (0, worker_1.getSyncStore)();
19
+ const storage = RecordsService.getFigshareIntentStorage();
20
+ if (options.action === 'migrate') {
21
+ const scan = storage.scanFigshareRecords?.bind(storage);
22
+ if (!scan)
23
+ throw new Error('Storage adapter cannot scan records for migration');
24
+ // Two paged passes hold one page at a time: the first counts legacy bindings, the second migrates.
25
+ const pages = async function* () {
26
+ for (let after = '';;) {
27
+ const page = await scan(after, 100);
28
+ yield page;
29
+ if (page.length < 100)
30
+ return;
31
+ after = page[page.length - 1].redboxOid;
32
+ }
33
+ };
34
+ const counts = new Map();
35
+ for await (const page of pages()) {
36
+ for (const record of page) {
37
+ const config = (0, config_1.resolveFigsharePublishingConfig)(record);
38
+ if (!config)
39
+ continue;
40
+ const id = String((0, types_1.getRecordField)(record, config.record.articleIdPath) ?? '');
41
+ if (id) {
42
+ const key = `${(0, identity_1.apiNamespace)(config)}:${id}`;
43
+ counts.set(key, (counts.get(key) ?? 0) + 1);
44
+ }
45
+ }
46
+ }
47
+ const report = [];
48
+ for await (const page of pages())
49
+ for (const record of page) {
50
+ const config = (0, config_1.resolveFigsharePublishingConfig)(record);
51
+ if (!config)
52
+ continue;
53
+ const id = String((0, types_1.getRecordField)(record, config.record.articleIdPath) ?? '');
54
+ const legacy = (0, types_1.getRecordField)(record, config.record.syncStatePath);
55
+ if (!id && !legacy)
56
+ continue;
57
+ const duplicate = id && (counts.get(`${(0, identity_1.apiNamespace)(config)}:${id}`) ?? 0) > 1;
58
+ if (!id || duplicate) {
59
+ report.push({ oid: record.redboxOid, articleId: id || undefined, status: duplicate ? 'duplicate_binding' : 'uncertain_legacy_create' });
60
+ if (options.apply) {
61
+ await store.ensureIndexes();
62
+ await store.initialise(record.redboxOid, record.metaMetadata.brandId);
63
+ const owner = `migration:${(0, node_crypto_1.randomUUID)()}`;
64
+ const lock = await store.collection.updateOne({ oid: record.redboxOid, leaseUntil: { $lte: Date.now() } }, { $set: { leaseOwner: owner, leaseUntil: Date.now() + 120000 }, $inc: { revision: 1 } });
65
+ if (!lock.matchedCount)
66
+ throw new Error(`Record ${record.redboxOid} has an active worker; pause processing before migration`);
67
+ try {
68
+ await store.change(record.redboxOid, s => {
69
+ s.status = 'repair_required';
70
+ s.waitingReason = duplicate ? 'duplicate_binding' : 'uncertain_legacy_create';
71
+ for (const work of Object.values(s.work))
72
+ work.dueAt = null;
73
+ }, owner);
74
+ }
75
+ finally {
76
+ await store.release(record.redboxOid, owner);
77
+ }
78
+ }
79
+ continue;
80
+ }
81
+ try {
82
+ report.push({ oid: record.redboxOid, result: await figshareAdmin({ ...options, action: 'link', oid: record.redboxOid, articleId: id }, { legacyBindingsCounted: true }) });
83
+ }
84
+ catch (e) {
85
+ report.push({ oid: record.redboxOid, status: 'repair_required', message: e instanceof Error ? e.message : String(e) });
86
+ }
87
+ }
88
+ return report;
89
+ }
90
+ const oid = options.oid;
91
+ if (!oid)
92
+ throw new Error('An OID is required');
93
+ const record = await RecordsService.getMeta(oid);
94
+ if (!record)
95
+ throw new Error('Record not found');
96
+ const brand = BrandingService.getBrandById(record.metaMetadata.brandId);
97
+ if (!brand || !await RecordsService.hasEditAccess(brand, actor, (actor.roles ?? []).map(r => ({ ...r })), record))
98
+ throw new Error('Administrator does not have access to this record');
99
+ let state = await store.get(oid);
100
+ if (options.action === 'inspect')
101
+ return { oid, sourceIntent: record.figshareSyncIntent, state };
102
+ const config = (0, config_1.resolveFigsharePublishingConfig)(record);
103
+ if (!config)
104
+ throw new Error('Figshare configuration is unavailable');
105
+ const client = config.runtime.mode === 'fixture' ? (0, http_1.makeFixtureClient)(config) : (0, http_1.makeLiveClient)(config, (0, context_1.createRunContext)(record, config, undefined, 'admin'));
106
+ const account = await client.getAccount();
107
+ if (state?.binding && (state.binding.namespace !== (0, identity_1.apiNamespace)(config) || state.binding.accountId !== String(account.id)))
108
+ throw new execution_1.FigshareRepairRequired('Configured API environment/account differs from the persisted binding');
109
+ const readOnly = (binding, read) => execution_1.figshareExecution.run({
110
+ binding, signal: new AbortController().signal,
111
+ guard: async () => { throw new Error('Administrative verification is read-only'); },
112
+ metadata: async () => { throw new Error('Administrative verification is read-only'); }
113
+ }, read);
114
+ const reconcileCreate = (create) => execution_1.figshareExecution.run({ binding: create.binding, recovery: true, signal: new AbortController().signal,
115
+ guard: async () => { throw new Error('Reconcile is read-only'); }, metadata: async () => { throw new Error('Reconcile is read-only'); }
116
+ }, () => (0, identity_1.recoverCreate)(client, create));
117
+ if (options.action === 'reconcile') {
118
+ if (!state?.create)
119
+ return { state, candidates: [] };
120
+ const recovered = await reconcileCreate(state.create);
121
+ return { state, candidates: recovered ? [{ articleId: recovered.id, title: recovered.title }] : [] };
122
+ }
123
+ let abandonedCreate;
124
+ if (options.action === 'abandon-create') {
125
+ if (!state?.create || state.binding?.articleId)
126
+ throw new Error('No unresolved create operation exists for this record');
127
+ // Only a create absent from the owning account may be abandoned; a visible match must be linked instead.
128
+ if (await reconcileCreate(state.create))
129
+ throw new execution_1.FigshareRepairRequired('An article matches the create token; link it instead of abandoning the create');
130
+ abandonedCreate = state.create.token;
131
+ }
132
+ let unconfirmedPublish;
133
+ if (options.action === 'reset-publish') {
134
+ const publish = state?.publish;
135
+ if (!publish || publish.outcome === 'observed' || !state?.binding?.articleId)
136
+ throw new Error('No unconfirmed publication request exists for this record');
137
+ const binding = state.binding;
138
+ const article = await readOnly(binding, () => client.getArticle(binding.articleId));
139
+ if ((0, identity_1.observedPublished)(article) && Number(article.version ?? 0) > publish.previousVersion)
140
+ throw new Error('The request published the article; resume records the observation instead');
141
+ if ((0, runtime_1.isCurationLocked)(config, article))
142
+ throw new Error('The article is under curation; wait for the curator before resetting publication');
143
+ unconfirmedPublish = publish.submittedAt;
144
+ }
145
+ const fileAction = options.action === 'bind-file' || options.action === 'resume-upload';
146
+ const receipt = fileAction ? state?.receipts.find(r => r.key === options.receipt) : undefined;
147
+ let verifiedFile;
148
+ if (fileAction) {
149
+ if (!receipt || !state?.binding?.articleId || !/^\d+$/.test(options.fileId ?? ''))
150
+ throw new Error('An existing receipt, authoritative article and explicit numeric file ID are required');
151
+ const binding = state.binding;
152
+ const descriptor = await readOnly(binding, () => client.getLocation(`${(0, identity_1.apiNamespace)(config)}/account/articles/${binding.articleId}/files/${options.fileId}`));
153
+ const available = ['available', 'completed'].includes(String(descriptor.status).toLowerCase());
154
+ if (Number(descriptor.size) !== receipt.size || !receipt.md5 || String(available ? descriptor.computed_md5 : descriptor.supplied_md5).toLowerCase() !== receipt.md5)
155
+ throw new Error('Remote file content evidence does not match the receipt');
156
+ if (options.action === 'bind-file' && !available)
157
+ throw new Error('Use resume-upload only after stopping the previous uploader');
158
+ if (options.action === 'resume-upload' && !state.work.sync.policies.length)
159
+ throw new Error('An authorised source sync policy is required to resume uploads');
160
+ if (String(descriptor.id) !== options.fileId)
161
+ throw new Error('Remote descriptor returned a different file identity');
162
+ verifiedFile = { id: String(descriptor.id), available };
163
+ }
164
+ let remote;
165
+ let verifiedOwnerId;
166
+ if (['link', 'relink'].includes(options.action)) {
167
+ const articleId = String(options.articleId ?? '');
168
+ const existing = state?.binding?.articleId === articleId ? state.binding : undefined;
169
+ if (options.ownerId != null && !/^\d+$/.test(options.ownerId))
170
+ throw new Error('An explicit numeric Figshare owner account ID is required');
171
+ if (existing && options.ownerId != null && options.ownerId !== existing.ownerId)
172
+ throw new execution_1.FigshareRepairRequired('Supplied owner differs from the verified binding; linking cannot transfer ownership');
173
+ const ownerId = options.ownerId ?? existing?.ownerId;
174
+ const ownerReads = config.impersonation?.enabled && config.impersonation.operations.read === 'owner';
175
+ if (ownerReads && !ownerId)
176
+ throw new execution_1.FigshareRepairRequired('Owner-based verification of an unbound or different article requires --owner-id ACCOUNT_ID');
177
+ const binding = ownerId ? { namespace: (0, identity_1.apiNamespace)(config), accountId: String(account.id), ownerId, articleId } : undefined;
178
+ remote = await readOnly(binding, () => client.getArticle(articleId));
179
+ if (String(remote.id) !== articleId)
180
+ throw new execution_1.FigshareRepairRequired('Remote article returned a different identity');
181
+ if (ownerId && String(remote.account_id ?? '') !== ownerId)
182
+ throw new execution_1.FigshareRepairRequired('Remote article owner does not match the supplied or previously verified owner account');
183
+ verifiedOwnerId = ownerId ?? String(remote.account_id ?? account.id);
184
+ }
185
+ if (remote) {
186
+ const duplicate = await store.collection.findOne({ namespace: (0, identity_1.apiNamespace)(config), articleId: String(remote.id), oid: { $ne: oid } });
187
+ if (duplicate)
188
+ throw new execution_1.FigshareRepairRequired(`Article is already bound to record ${duplicate.oid}`);
189
+ // Migration has already counted every legacy binding, so a per-record scan would only repeat it.
190
+ const matches = internal.legacyBindingsCounted ? [] : await storage.findFigshareArticleRecords?.(config.record.articleIdPath, String(remote.id)) ?? [];
191
+ if (matches.some(r => r.redboxOid !== oid && (0, config_1.resolveFigsharePublishingConfig)(r)?.connection.baseUrl.replace(/\/+$/, '') === (0, identity_1.apiNamespace)(config)))
192
+ throw new execution_1.FigshareRepairRequired('Duplicate legacy bindings must be resolved first');
193
+ if (state?.binding?.articleId && state.binding.articleId !== String(remote.id) && options.action !== 'relink')
194
+ throw new Error('Use explicit relink to change an existing authoritative article ID');
195
+ }
196
+ if (!options.apply)
197
+ return { dryRun: true, oid, action: options.action, articleId: remote?.id, file: verifiedFile, publication: remote && (0, identity_1.observedPublished)(remote), ownerId: verifiedOwnerId, retainedLocalBytes: true };
198
+ await store.ensureIndexes();
199
+ await store.initialise(oid, record.metaMetadata.brandId);
200
+ const owner = `admin:${(0, node_crypto_1.randomUUID)()}`;
201
+ const lock = await store.collection.updateOne({ oid, leaseUntil: { $lte: Date.now() } }, { $set: { leaseOwner: owner, leaseUntil: Date.now() + 120000 }, $inc: { revision: 1 } });
202
+ if (!lock.matchedCount)
203
+ throw new Error('Record has an active worker; pause processing and try again');
204
+ try {
205
+ state = await store.change(oid, s => {
206
+ if (verifiedFile && receipt) {
207
+ const current = s.receipts.find(r => r.key === receipt.key);
208
+ if (!current || current.digest !== receipt.digest || current.articleId !== s.binding?.articleId || s.binding?.articleId !== state?.binding?.articleId)
209
+ throw new Error('Receipt changed during verification; inspect and retry');
210
+ current.fileId = verifiedFile.id;
211
+ current.state = verifiedFile.available ? 'available' : 'uploading';
212
+ current.resumeApproved = !verifiedFile.available;
213
+ s.status = 'queued';
214
+ delete s.error;
215
+ if (s.auditClosed) {
216
+ delete s.audit;
217
+ s.auditClosed = false;
218
+ }
219
+ s.work.sync.requested++;
220
+ s.work.sync.dueAt = Date.now();
221
+ }
222
+ else if (remote && verifiedOwnerId) {
223
+ const changed = s.binding?.articleId && s.binding.articleId !== String(remote.id);
224
+ if (changed && options.action !== 'relink')
225
+ throw new Error('Use explicit relink to change an existing authoritative article ID');
226
+ if (s.binding?.articleId === String(remote.id) && s.binding.ownerId !== verifiedOwnerId)
227
+ throw new execution_1.FigshareRepairRequired('Verified owner binding changed during verification; inspect and retry');
228
+ if (changed && s.publish && s.publish.outcome !== 'observed')
229
+ throw new Error('Reconcile the outstanding publication before relinking');
230
+ if (changed && s.receipts.some(r => r.state !== 'removed'))
231
+ throw new Error('Relinking with managed receipts requires reconciliation of those files first');
232
+ if (changed)
233
+ delete s.publish;
234
+ s.binding = { namespace: (0, identity_1.apiNamespace)(config), accountId: String(account.id), ownerId: verifiedOwnerId, articleId: String(remote.id) };
235
+ s.namespace = s.binding.namespace;
236
+ s.articleId = s.binding.articleId;
237
+ s.publication = (0, identity_1.observedPublished)(remote) ? 'published' : 'private';
238
+ s.embargoed = remote.is_embargoed === true;
239
+ s.status = 'synced';
240
+ s.observedAt = new Date().toISOString();
241
+ if (s.work.observe.dueAt == null) {
242
+ s.work.observe.requested++;
243
+ s.work.observe.dueAt = Date.now();
244
+ }
245
+ // No publication or ownership transfer is requested by migration/linking.
246
+ }
247
+ else if (options.action === 'resume') {
248
+ if (s.work.sync.policies.length === 0)
249
+ throw new Error('No authorised source sync policy exists; save through an eligible configured source first');
250
+ s.status = 'queued';
251
+ delete s.error;
252
+ if (s.auditClosed) {
253
+ delete s.audit;
254
+ s.auditClosed = false;
255
+ }
256
+ s.work.sync.requested++;
257
+ s.work.sync.dueAt = Date.now();
258
+ // Create/publish/receipt uncertainty is intentionally retained.
259
+ }
260
+ else if (abandonedCreate) {
261
+ if (s.binding?.articleId || s.create?.token !== abandonedCreate)
262
+ throw new Error('Create evidence changed during verification; inspect and retry');
263
+ delete s.create;
264
+ delete s.createGeneration;
265
+ delete s.createRequest;
266
+ delete s.binding;
267
+ // A fresh create waits for resume or a new eligible source save.
268
+ }
269
+ else if (unconfirmedPublish) {
270
+ if (s.publish?.submittedAt !== unconfirmedPublish || s.binding?.articleId !== state?.binding?.articleId)
271
+ throw new Error('Publication evidence changed during verification; inspect and retry');
272
+ delete s.publish;
273
+ // Publication is requested again by resume or a new eligible source save.
274
+ }
275
+ s.corrections = [...(s.corrections ?? []).slice(-49), { at: new Date().toISOString(), actor: actor.username, action: options.action, articleId: remote ? String(remote.id) : undefined }];
276
+ }, owner);
277
+ return { oid, state, retainedLocalBytes: true };
278
+ }
279
+ finally {
280
+ await store.release(oid, owner);
281
+ }
282
+ }
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZmlnc2hhcmUtdjIvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsc0NBeUxDO0FBek1ELDZDQUF5QztBQUV6QyxtQ0FBeUM7QUFDekMscUNBQXdDO0FBQ3hDLHFDQUEyRDtBQUMzRCx1Q0FBNkM7QUFDN0MsaUNBQTJEO0FBQzNELHlDQUE0RTtBQUM1RSwyQ0FBd0U7QUFDeEUsdUNBQTZDO0FBTTdDLCtGQUErRjtBQUN4RixLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQTZCLEVBQUUsV0FBZ0QsRUFBRTtJQUNuSCxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkYsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztJQUMzSixNQUFNLEtBQUssR0FBRyxJQUFBLHFCQUFZLEdBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUMxRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUNoRixtR0FBbUc7UUFDbkcsTUFBTSxLQUFLLEdBQUcsS0FBSyxTQUFTLENBQUM7WUFDM0IsS0FBSyxJQUFJLEtBQUss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
@@ -1,6 +1,25 @@
1
+ import { Readable } from 'node:stream';
1
2
  import type { ILogger } from '../../Logger';
3
+ import { FigsharePublishingConfigData } from '../../configmodels/FigsharePublishing';
4
+ import type { Services as StorageManagerServices } from '../StorageManagerService';
2
5
  import { FigshareClient } from './http';
3
6
  import { ResolvedFigsharePublishingConfigData } from './config';
4
- import { RecordModel, FigshareArticle, FigshareSyncState, AssetSyncResult } from './types';
7
+ import { RecordModel, FigshareArticle, FigshareUploadPart, FigshareSyncState, AssetSyncResult } from './types';
8
+ type IDisk = StorageManagerServices.IDisk;
9
+ interface DatastreamResponse {
10
+ readstream: NodeJS.ReadableStream;
11
+ size?: number;
12
+ }
13
+ export declare function getAttachmentStream(oid: string, fileId: string): Promise<DatastreamResponse>;
14
+ /** Identify stored attachment bytes without reading them, when the datastream service supports it. */
15
+ export declare function getAttachmentFingerprint(oid: string, fileId: string): Promise<string | undefined>;
16
+ export declare function getStagingDisk(config: FigsharePublishingConfigData): IDisk;
17
+ export declare function buildStagingKey(config: FigsharePublishingConfigData, articleId: string, oid: string, fileId: string, fileName: string, logger?: ILogger): string;
18
+ export declare function stageAttachmentToDisk(disk: IDisk, key: string, response: DatastreamResponse): Promise<number>;
19
+ export declare function readPartsSequentially(source: Readable, parts: FigshareUploadPart[]): AsyncGenerator<{
20
+ partNo: number;
21
+ stream: Readable;
22
+ }>;
5
23
  export declare function syncAssetsPhase(client: FigshareClient, config: ResolvedFigsharePublishingConfigData, record: RecordModel, article: FigshareArticle, syncState: FigshareSyncState, logger?: ILogger): Promise<AssetSyncResult>;
24
+ export {};
6
25
  //# sourceMappingURL=assets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,WAAW,EACX,eAAe,EAGf,iBAAiB,EAEjB,eAAe,EAChB,MAAM,SAAS,CAAC;AA0WjB,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oCAAoC,EAC5C,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,iBAAiB,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,eAAe,CAAC,CAiG1B"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/assets.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAErF,OAAO,KAAK,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,WAAW,EACX,eAAe,EAEf,kBAAkB,EAClB,iBAAiB,EAEjB,eAAe,EAChB,MAAM,SAAS,CAAC;AAIjB,KAAK,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC;AAyB1C,UAAU,kBAAkB;IAC1B,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAalG;AAED,sGAAsG;AACtG,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAOvG;AA6BD,wBAAgB,cAAc,CAAC,MAAM,EAAE,4BAA4B,GAAG,KAAK,CAoB1E;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,4BAA4B,EACpC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,OAAO,GACf,MAAM,CAsBR;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAKnH;AAED,wBAAuB,qBAAqB,CAC1C,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,kBAAkB,EAAE,GAC1B,cAAc,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC,CAoCtD;AA2LD,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oCAAoC,EAC5C,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,iBAAiB,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,eAAe,CAAC,CAiG1B"}
@@ -3,6 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getAttachmentStream = getAttachmentStream;
7
+ exports.getAttachmentFingerprint = getAttachmentFingerprint;
8
+ exports.getStagingDisk = getStagingDisk;
9
+ exports.buildStagingKey = buildStagingKey;
10
+ exports.stageAttachmentToDisk = stageAttachmentToDisk;
11
+ exports.readPartsSequentially = readPartsSequentially;
6
12
  exports.syncAssetsPhase = syncAssetsPhase;
7
13
  const path_1 = __importDefault(require("path"));
8
14
  const node_crypto_1 = require("node:crypto");
@@ -40,6 +46,15 @@ async function getAttachmentStream(oid, fileId) {
40
46
  }
41
47
  return response;
42
48
  }
49
+ /** Identify stored attachment bytes without reading them, when the datastream service supports it. */
50
+ async function getAttachmentFingerprint(oid, fileId) {
51
+ const datastreamService = getDatastreamService();
52
+ const fingerprint = datastreamService?.getDatastreamFingerprint;
53
+ if (typeof fingerprint !== 'function') {
54
+ return undefined;
55
+ }
56
+ return (await fingerprint.call(datastreamService, oid, fileId)) || undefined;
57
+ }
43
58
  async function ensureAttachmentDatastream(oid, fileId) {
44
59
  const response = await getAttachmentStream(oid, fileId);
45
60
  const stream = response.readstream;
@@ -381,4 +396,4 @@ async function syncAssetsPhase(client, config, record, article, syncState, logge
381
396
  dataLocations: selectedDataLocations,
382
397
  };
383
398
  }
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTRYQSwwQ0F3R0M7QUFwZUQsZ0RBQXdCO0FBRXhCLDZDQUF5QztBQUN6Qyw2Q0FBdUM7QUFHdkMscUVBQWtFO0FBYWxFLHFDQUF3QztBQUN4QyxpQ0FBa0Q7QUFJbEQsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLENBQUM7QUFDdkMsTUFBTSw4QkFBOEIsR0FBRyxTQUFTLENBQUM7QUFDakQsTUFBTSw2QkFBNkIsR0FBRyxrQkFBa0IsQ0FBQztBQUV6RCxTQUFTLFlBQVksQ0FBQyxNQUFtQjtJQUN2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sWUFBWSxHQUFJLEtBQUssQ0FBQyxNQUFrQyxDQUFDLE1BQTZDLENBQUM7SUFDN0csTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxPQUFPLFdBQVc7UUFDaEIsQ0FBQyxDQUFHLEtBQUssQ0FBQyxRQUFvQyxFQUFFLENBQUMsV0FBVyxDQUF5QztRQUNyRyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFlO0lBQ3RDLE9BQU8sSUFBSSxxQ0FBaUIsQ0FBQztRQUMzQixPQUFPO1FBQ1AsYUFBYSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUNyRCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBT0QsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQzVELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9C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
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2Fzc2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQW9EQSxrREFhQztBQUdELDREQU9DO0FBNkJELHdDQW9CQztBQUVELDBDQTZCQztBQUVELHNEQUtDO0FBRUQsc0RBdUNDO0FBMkxELDBDQXdHQztBQTllRCxnREFBd0I7QUFFeEIsNkNBQXlDO0FBQ3pDLDZDQUF1QztBQUd2QyxxRUFBa0U7QUFhbEUscUNBQXdDO0FBQ3hDLGlDQUFrRDtBQUlsRCxNQUFNLDRCQUE0QixHQUFHLENBQUMsQ0FBQztBQUN2QyxNQUFNLDhCQUE4QixHQUFHLFNBQVMsQ0FBQztBQUNqRCxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUFDO0FBRXpELFNBQVMsWUFBWSxDQUFDLE1BQW1CO0lBQ3ZDLE9BQU8sTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxvQkFBb0I7SUFDM0IsTUFBTSxZQUFZLEdBQUksS0FBSyxDQUFDLE1BQWtDLENBQUMsTUFBNkMsQ0FBQztJQUM3RyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sV0FBVztRQUNoQixDQUFDLENBQUcsS0FBSyxDQUFDLFFBQW9DLEVBQUUsQ0FBQyxXQUFXLENBQXlDO1FBQ3JHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE9BQWU7SUFDdEMsT0FBTyxJQUFJLHFDQUFpQixDQUFDO1FBQzNCLE9BQU87UUFDUCxhQUFhLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0tBQ3JELENBQUMsQ0FBQztBQUNMLENBQUM7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
@@ -1,13 +1,19 @@
1
1
  import { type FigshareFixtureConfig, type FigsharePublishingConfigData } from '../../configmodels/FigsharePublishing';
2
2
  import { FigshareSyncState, RecordModel } from './types';
3
3
  export interface ResolvedFigsharePublishingConfigData extends FigsharePublishingConfigData {
4
+ /** Keeps source saves valid while preventing queued execution until configuration is corrected. */
5
+ processingError?: string;
4
6
  runtime: {
5
7
  mode: 'live' | 'fixture';
6
8
  fixtures?: FigshareFixtureConfig;
7
9
  };
8
10
  }
9
- export declare function getBrandName(record?: RecordModel): string;
10
- export declare function resolveFigsharePublishingConfig(record?: RecordModel): ResolvedFigsharePublishingConfigData | null;
11
+ export declare function getBrandName(record?: Record<string, unknown>): string;
12
+ /** Keep configured legacy relative delays when the new millisecond setting is absent. */
13
+ export declare function legacyDelayMs(value: string): number;
14
+ export declare function resolveFigsharePublishingConfig(record?: Record<string, unknown>, options?: {
15
+ requireToken?: boolean;
16
+ }): ResolvedFigsharePublishingConfigData | null;
11
17
  /**
12
18
  * Resolve the brand's Figshare connection for vocabulary administration.
13
19
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/config.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EAClC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAkC,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzF,MAAM,WAAW,oCAAqC,SAAQ,4BAA4B;IACxF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;KAClC,CAAC;CACH;AAsBD,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CA0BzD;AAkBD,wBAAgB,+BAA+B,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,oCAAoC,GAAG,IAAI,CAkCjH;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,oCAAoC,GAAG,IAAI,CA4B9G;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAEzG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAO1H"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/figshare-v2/config.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EAClC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAkC,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzF,MAAM,WAAW,oCAAqC,SAAQ,4BAA4B;IACxF,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,QAAQ,CAAC,EAAE,qBAAqB,CAAC;KAClC,CAAC;CACH;AAsBD,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CA0BrE;AAkBD,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,+BAA+B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,oCAAoC,GAAG,IAAI,CA2CvK;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,oCAAoC,GAAG,IAAI,CA4B9G;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAEzG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAO1H"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getBrandName = getBrandName;
7
+ exports.legacyDelayMs = legacyDelayMs;
7
8
  exports.resolveFigsharePublishingConfig = resolveFigsharePublishingConfig;
8
9
  exports.resolveFigshareVocabularyConfig = resolveFigshareVocabularyConfig;
9
10
  exports.getSyncState = getSyncState;
@@ -71,7 +72,19 @@ function shouldUseFixtureRuntime(figshareDev) {
71
72
  }
72
73
  return figshareDev.enabled === true && figshareDev.mode === 'fixture';
73
74
  }
74
- function resolveFigsharePublishingConfig(record) {
75
+ /** Keep configured legacy relative delays when the new millisecond setting is absent. */
76
+ function legacyDelayMs(value) {
77
+ const match = /^\s*(?:in\s+)?(\d+(?:\.\d+)?)\s*(milliseconds?|ms|seconds?|minutes?|hours?|days?|weeks?)\s*$/i.exec(value);
78
+ if (!match)
79
+ throw new Error(`Unsupported Figshare delay '${value}'; configure processing observationMs/cleanupMs explicitly`);
80
+ const unit = match[2].toLowerCase();
81
+ const multiplier = unit === 'ms' || unit.startsWith('millisecond') ? 1 : unit.startsWith('second') ? 1000 : unit.startsWith('minute') ? 60000 : unit.startsWith('hour') ? 3600000 : unit.startsWith('day') ? 86400000 : 604800000;
82
+ const result = Number(match[1]) * multiplier;
83
+ if (!Number.isFinite(result) || result <= 0)
84
+ throw new Error('Figshare delay must be positive');
85
+ return result;
86
+ }
87
+ function resolveFigsharePublishingConfig(record, options = {}) {
75
88
  const brandName = getBrandName(record);
76
89
  const appConfigService = getAppConfigResolver();
77
90
  const brandConfig = appConfigService?.getAppConfigurationForBrand?.(brandName) ?? appConfigService?.getAppConfigurationForBrand?.('default');
@@ -82,6 +95,21 @@ function resolveFigsharePublishingConfig(record) {
82
95
  : undefined;
83
96
  if (figsharePublishingConfig?.enabled === true) {
84
97
  const resolvedConfig = lodash_1.default.merge(new FigsharePublishing_1.FigsharePublishing(), lodash_1.default.cloneDeep(figsharePublishingConfig));
98
+ if (resolvedConfig.processing?.enabled) {
99
+ const errors = [];
100
+ for (const [setting, legacy] of [['observationMs', 'publishAfterUploadDelay'], ['cleanupMs', 'uploadedFilesCleanupDelay']]) {
101
+ if (figsharePublishingConfig.processing?.[setting] != null)
102
+ continue;
103
+ try {
104
+ resolvedConfig.processing[setting] = legacyDelayMs(resolvedConfig.queue[legacy]);
105
+ }
106
+ catch {
107
+ errors.push(`Cannot convert queue.${legacy} to milliseconds; configure processing.${setting} explicitly.`);
108
+ }
109
+ }
110
+ if (errors.length)
111
+ resolvedConfig.processingError = errors.join(' ');
112
+ }
85
113
  const figshareDev = resolveFigshareDevConfig();
86
114
  const useFixtureRuntime = shouldUseFixtureRuntime(figshareDev);
87
115
  resolvedConfig.runtime = {
@@ -93,7 +121,7 @@ function resolveFigsharePublishingConfig(record) {
93
121
  : { ...new FigsharePublishing_1.FigsharePublishing().connection };
94
122
  resolvedConfig.connection = resolvedConnection;
95
123
  const connectionToken = resolvedConfig.connection?.token;
96
- const allowEmpty = resolvedConfig.runtime.mode === 'fixture';
124
+ const allowEmpty = resolvedConfig.runtime.mode === 'fixture' || options.requireToken === false;
97
125
  if (typeof connectionToken === 'string' && connectionToken.trim() !== '') {
98
126
  resolvedConfig.connection.token = (0, FigsharePublishing_1.resolveFigshareConnectionToken)(connectionToken, { allowEmpty });
99
127
  }
@@ -155,4 +183,4 @@ function setSyncState(config, record, syncState) {
155
183
  (0, types_1.setRecordField)(record, config.record.statusPath, syncState.status);
156
184
  (0, types_1.setRecordField)(record, config.record.errorPath, syncState.lastError ?? '');
157
185
  }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXNDQSxvQ0EwQkM7QUFrQkQsMEVBa0NDO0FBV0QsMEVBNEJDO0FBRUQsb0NBRUM7QUFFRCxvQ0FPQztBQXhLRCxvREFBdUI7QUFDdkIsOEVBSytDO0FBRS9DLG1DQUF5RjtBQUN6RixvQ0FBMEM7QUFhMUM7Ozs7O0dBS0c7QUFDSCxTQUFTLG9CQUFvQjtJQUMzQixNQUFNLGFBQWEsR0FBRyxPQUFPLGdCQUFnQixLQUFLLFdBQVc7UUFDM0QsQ0FBQyxDQUFDLFNBQVM7UUFDWCxDQUFDLENBQUMsZ0JBQXFDLENBQUM7SUFDMUMsSUFBSSxPQUFPLGFBQWEsRUFBRSwyQkFBMkIsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNyRSxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsT0FBTyxzQkFBYyxDQUFDLGdCQUFpRCxDQUFDO0FBQzFFLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsTUFBb0I7SUFDL0MsSUFBSSxNQUFNLElBQUksSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3JDLE1BQU0sRUFBRSxHQUFHLE1BQXFCLENBQUM7SUFDakMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxJQUFLLE1BQWtDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9HLElBQUksUUFBUSxLQUFLLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUV0QyxxRkFBcUY7SUFDckYsdUZBQXVGO0lBQ3ZGLG1GQUFtRjtJQUNuRiw0Q0FBNEM7SUFDNUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxlQUFlLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUM3RixJQUFJLGVBQWUsSUFBSSxJQUFJO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDN0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxlQUFlLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzFILElBQUksU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNwRSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELG9GQUFvRjtJQUNwRixNQUFNLFdBQVcsR0FBRyxPQUFPLGVBQWUsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEgsSUFBSSxXQUFXLElBQUksSUFBSTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3pDLHlGQUF5RjtJQUN6RiwwRkFBMEY7SUFDMUYscUZBQXFGO0lBQ3JGLHVGQUF1RjtJQUN2Riw0REFBNEQ7SUFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0RBQW9ELFFBQVEsc0RBQXNELENBQUMsQ0FBQztJQUNuSSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBUyx3QkFBd0I7SUFDL0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUM7SUFDNUMsSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsT0FBTyxTQUE4QixDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFdBQThCO0lBQzdELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsRyxJQUFJLFdBQVcsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFnQiwrQkFBK0IsQ0FBQyxNQUFvQjtJQUNsRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixFQUFFLDJCQUEyQixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksZ0JBQWdCLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3SSxNQUFNLGlCQUFpQixHQUFHLFdBQVcsSUFBSSxJQUFJLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFzQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEksTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQztJQUNqRSxNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixJQUFJLElBQUksSUFBSSxPQUFPLGtCQUFrQixLQUFLLFFBQVE7UUFDbkcsQ0FBQyxDQUFDLGtCQUEyRDtRQUM3RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2QsSUFBSSx3QkFBd0IsRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsZ0JBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSx1Q0FBa0IsRUFBRSxFQUFFLGdCQUFDLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLENBQW9ELENBQUM7UUFDbkosTUFBTSxXQUFXLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELGNBQWMsQ0FBQyxPQUFPLEdBQUc7WUFDdkIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDNUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxnQkFBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDNUUsQ0FBQztRQUNGLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksT0FBTyxjQUFjLENBQUMsVUFBVSxLQUFLLFFBQVE7WUFDM0csQ0FBQyxDQUFDLGNBQWMsQ0FBQyxVQUFVO1lBQzNCLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSx1Q0FBa0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9DLGNBQWMsQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUM7UUFDekQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO1FBQzdELElBQUksT0FBTyxlQUFlLEtBQUssUUFBUSxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN6RSxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFBLG1EQUE4QixFQUFDLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEcsQ0FBQzthQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFBLG1EQUE4QixFQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLENBQUM7YUFBTSxJQUFJLGNBQWMsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDN0MsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQiwrQkFBK0IsQ0FBQyxTQUFpQjtJQUMvRCxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixFQUFFLENBQUM7SUFDaEQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUM7V0FDekUsZ0JBQWdCLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRSxNQUFNLGlCQUFpQixHQUFHLFdBQVcsSUFBSSxJQUFJLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFzQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEksTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQztJQUNqRSxNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixJQUFJLElBQUksSUFBSSxPQUFPLGtCQUFrQixLQUFLLFFBQVE7UUFDbkcsQ0FBQyxDQUFDLGtCQUEyRDtRQUM3RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2QsSUFBSSx3QkFBd0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxnQkFBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLHVDQUFrQixFQUFFLEVBQUUsZ0JBQUMsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBb0QsQ0FBQztJQUNuSixNQUFNLFdBQVcsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0lBQy9DLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0QsY0FBYyxDQUFDLE9BQU8sR0FBRztRQUN2QixJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUM1QyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGdCQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUM1RSxDQUFDO0lBQ0YsY0FBYyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxPQUFPLGNBQWMsQ0FBQyxVQUFVLEtBQUssUUFBUTtRQUM1RyxDQUFDLENBQUMsY0FBYyxDQUFDLFVBQVU7UUFDM0IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLHVDQUFrQixFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0MsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDeEQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsT0FBTyxlQUFlLEtBQUssUUFBUSxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ3BHLENBQUMsQ0FBQyxJQUFBLG1EQUE4QixFQUFDLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN2RSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxNQUFvQyxFQUFFLE1BQW1CO0lBQ3BGLE9BQVEsSUFBQSxzQkFBYyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBdUIsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMxRyxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLE1BQW9DLEVBQUUsTUFBbUIsRUFBRSxTQUE0QjtJQUNsSCxJQUFBLHNCQUFjLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO1FBQ2xELEdBQUcsU0FBUztRQUNaLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO0tBQzdELENBQUMsQ0FBQztJQUNILElBQUEsc0JBQWMsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLElBQUEsc0JBQWMsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3RSxDQUFDIn0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ZpZ3NoYXJlLXYyL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXdDQSxvQ0EwQkM7QUFtQkQsc0NBUUM7QUFFRCwwRUEyQ0M7QUFXRCwwRUE0QkM7QUFFRCxvQ0FFQztBQUVELG9DQU9DO0FBOUxELG9EQUF1QjtBQUN2Qiw4RUFLK0M7QUFFL0MsbUNBQXlGO0FBQ3pGLG9DQUEwQztBQWUxQzs7Ozs7R0FLRztBQUNILFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sYUFBYSxHQUFHLE9BQU8sZ0JBQWdCLEtBQUssV0FBVztRQUMzRCxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxnQkFBcUMsQ0FBQztJQUMxQyxJQUFJLE9BQU8sYUFBYSxFQUFFLDJCQUEyQixLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLHNCQUFjLENBQUMsZ0JBQWlELENBQUM7QUFDMUUsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxNQUFnQztJQUMzRCxJQUFJLE1BQU0sSUFBSSxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDckMsTUFBTSxFQUFFLEdBQUcsTUFBcUIsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUssTUFBa0MsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0csSUFBSSxRQUFRLEtBQUssRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRXRDLHFGQUFxRjtJQUNyRix1RkFBdUY7SUFDdkYsbUZBQW1GO0lBQ25GLDRDQUE0QztJQUM1QyxNQUFNLGVBQWUsR0FBRyxPQUFPLGVBQWUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMs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