@cyanheads/pubmed-mcp-server 2.10.17 → 2.10.19
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/AGENTS.md +12 -14
- package/CLAUDE.md +12 -14
- package/Dockerfile +77 -36
- package/README.md +86 -109
- package/changelog/2.10.x/2.10.17.md +1 -1
- package/changelog/2.10.x/2.10.18.md +14 -0
- package/changelog/2.10.x/2.10.19.md +42 -0
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +7 -3
- package/dist/config/server-config.js.map +1 -1
- package/dist/mcp-server/resources/definitions/database-info.resource.d.ts +43 -1
- package/dist/mcp-server/resources/definitions/database-info.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/database-info.resource.js +2 -0
- package/dist/mcp-server/resources/definitions/database-info.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_visible-text.d.ts +19 -0
- package/dist/mcp-server/tools/definitions/_visible-text.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_visible-text.js +22 -0
- package/dist/mcp-server/tools/definitions/_visible-text.js.map +1 -0
- package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts +11 -4
- package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/convert-ids.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/convert-ids.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts +20 -7
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js +40 -5
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts +11 -4
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js +18 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.js +39 -10
- package/dist/mcp-server/tools/definitions/find-related.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts +11 -4
- package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts +16 -15
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.js +40 -22
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts +13 -6
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js +8 -8
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.js +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.d.ts +19 -5
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.js +37 -7
- package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts +40 -18
- package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-articles.tool.js +193 -43
- package/dist/mcp-server/tools/definitions/search-articles.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts +13 -6
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.js +8 -8
- package/dist/mcp-server/tools/definitions/spell-check.tool.js.map +1 -1
- package/dist/services/error-contracts.d.ts +42 -71
- package/dist/services/error-contracts.d.ts.map +1 -1
- package/dist/services/error-contracts.js +43 -75
- package/dist/services/error-contracts.js.map +1 -1
- package/dist/services/europe-pmc/api-client.d.ts +8 -2
- package/dist/services/europe-pmc/api-client.d.ts.map +1 -1
- package/dist/services/europe-pmc/api-client.js +13 -8
- package/dist/services/europe-pmc/api-client.js.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.d.ts +43 -14
- package/dist/services/europe-pmc/europe-pmc-service.d.ts.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.js +165 -85
- package/dist/services/europe-pmc/europe-pmc-service.js.map +1 -1
- package/dist/services/europe-pmc/request-queue.d.ts +11 -27
- package/dist/services/europe-pmc/request-queue.d.ts.map +1 -1
- package/dist/services/europe-pmc/request-queue.js +17 -104
- package/dist/services/europe-pmc/request-queue.js.map +1 -1
- package/dist/services/europe-pmc/types.d.ts +6 -1
- package/dist/services/europe-pmc/types.d.ts.map +1 -1
- package/dist/services/ncbi/api-client.d.ts.map +1 -1
- package/dist/services/ncbi/api-client.js +2 -3
- package/dist/services/ncbi/api-client.js.map +1 -1
- package/dist/services/ncbi/ncbi-service.d.ts +2 -1
- package/dist/services/ncbi/ncbi-service.d.ts.map +1 -1
- package/dist/services/ncbi/ncbi-service.js +67 -20
- package/dist/services/ncbi/ncbi-service.js.map +1 -1
- package/dist/services/ncbi/parsing/article-parser.d.ts +15 -1
- package/dist/services/ncbi/parsing/article-parser.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/article-parser.js +29 -0
- package/dist/services/ncbi/parsing/article-parser.js.map +1 -1
- package/dist/services/ncbi/response-handler.d.ts.map +1 -1
- package/dist/services/ncbi/response-handler.js +22 -19
- package/dist/services/ncbi/response-handler.js.map +1 -1
- package/dist/services/ncbi/types.d.ts +33 -0
- package/dist/services/ncbi/types.d.ts.map +1 -1
- package/dist/services/openalex/api-client.d.ts.map +1 -1
- package/dist/services/openalex/api-client.js +6 -7
- package/dist/services/openalex/api-client.js.map +1 -1
- package/dist/services/openalex/openalex-service.d.ts +11 -1
- package/dist/services/openalex/openalex-service.d.ts.map +1 -1
- package/dist/services/openalex/openalex-service.js +18 -11
- package/dist/services/openalex/openalex-service.js.map +1 -1
- package/dist/services/unpaywall/unpaywall-service.d.ts.map +1 -1
- package/dist/services/unpaywall/unpaywall-service.js +1 -3
- package/dist/services/unpaywall/unpaywall-service.js.map +1 -1
- package/package.json +6 -5
- package/server.json +3 -3
|
@@ -1,111 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
3
|
-
* concurrent in-flight requests and
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* @fileoverview Request queue for Europe PMC calls, built on the framework pacer.
|
|
3
|
+
* Caps concurrent in-flight requests and spaces request starts to stay polite with
|
|
4
|
+
* EBI's infrastructure, and releases a waiting caller the moment its signal aborts.
|
|
5
|
+
* Each retry attempt re-enters the queue, so a backoff sleep holds no slot and every
|
|
6
|
+
* attempt waits out the start gap. Independent rate domain from NCBI's queue —
|
|
7
|
+
* Europe PMC runs on a different host with its own limits.
|
|
7
8
|
* @module src/services/europe-pmc/request-queue
|
|
8
9
|
*/
|
|
9
|
-
import {
|
|
10
|
-
const DEFAULT_MAX_CONCURRENT = 4;
|
|
10
|
+
import { createPacer } from '@cyanheads/mcp-ts-core/utils';
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* - **Throughput** (`minStartGapMs`): minimum delay between two consecutive
|
|
15
|
-
* dispatch times. Defaults to 200ms to be polite with EBI.
|
|
16
|
-
* - **Concurrency** (`maxConcurrent`): maximum simultaneous in-flight
|
|
17
|
-
* requests. Decouples concurrency from rate so slow upstream responses
|
|
18
|
-
* don't block new dispatches.
|
|
19
|
-
*
|
|
20
|
-
* Enqueue accepts an optional `AbortSignal` so callers can bound their total
|
|
21
|
-
* time inside the scheduler — when the signal fires, a still-waiting task
|
|
22
|
-
* rejects immediately instead of sitting behind a saturated worker.
|
|
12
|
+
* Europe PMC requests in flight at once. `pubmed_fetch_fulltext` fans its Europe PMC
|
|
13
|
+
* tier out over every candidate in parallel and relies on this cap to bound it.
|
|
23
14
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
this.minStartGapMs = minStartGapMs;
|
|
33
|
-
this.maxConcurrent = maxConcurrent;
|
|
34
|
-
}
|
|
35
|
-
enqueue(task, label, signal) {
|
|
36
|
-
return new Promise((resolve, reject) => {
|
|
37
|
-
if (signal?.aborted) {
|
|
38
|
-
reject(signal.reason);
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
const waiter = {
|
|
42
|
-
resolve,
|
|
43
|
-
reject,
|
|
44
|
-
task,
|
|
45
|
-
label,
|
|
46
|
-
...(signal && { signal }),
|
|
47
|
-
};
|
|
48
|
-
if (signal) {
|
|
49
|
-
const onAbort = () => {
|
|
50
|
-
const idx = this.waiters.indexOf(waiter);
|
|
51
|
-
if (idx === -1)
|
|
52
|
-
return;
|
|
53
|
-
this.waiters.splice(idx, 1);
|
|
54
|
-
reject(signal.reason);
|
|
55
|
-
};
|
|
56
|
-
waiter.onAbort = onAbort;
|
|
57
|
-
signal.addEventListener('abort', onAbort, { once: true });
|
|
58
|
-
}
|
|
59
|
-
this.waiters.push(waiter);
|
|
60
|
-
this.tryDispatch();
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
tryDispatch() {
|
|
64
|
-
if (this.nextDispatchTimer !== undefined)
|
|
65
|
-
return;
|
|
66
|
-
while (this.inFlight < this.maxConcurrent && this.waiters.length > 0) {
|
|
67
|
-
const now = Date.now();
|
|
68
|
-
const gap = this.minStartGapMs - (now - this.lastStartTime);
|
|
69
|
-
if (gap > 0) {
|
|
70
|
-
this.nextDispatchTimer = setTimeout(() => {
|
|
71
|
-
this.nextDispatchTimer = undefined;
|
|
72
|
-
this.tryDispatch();
|
|
73
|
-
}, gap);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const waiter = this.waiters.shift();
|
|
77
|
-
if (!waiter)
|
|
78
|
-
return;
|
|
79
|
-
if (waiter.signal && waiter.onAbort) {
|
|
80
|
-
waiter.signal.removeEventListener('abort', waiter.onAbort);
|
|
81
|
-
}
|
|
82
|
-
this.lastStartTime = Date.now();
|
|
83
|
-
this.inFlight += 1;
|
|
84
|
-
logger.debug(`Executing Europe PMC request via queue: ${waiter.label}`, requestContextService.createRequestContext({
|
|
85
|
-
operation: 'EuropePmcQueueDispatch',
|
|
86
|
-
additionalContext: {
|
|
87
|
-
label: waiter.label,
|
|
88
|
-
inFlight: this.inFlight,
|
|
89
|
-
queueDepth: this.waiters.length,
|
|
90
|
-
},
|
|
91
|
-
}));
|
|
92
|
-
Promise.resolve()
|
|
93
|
-
.then(() => waiter.task())
|
|
94
|
-
.then(waiter.resolve, (err) => {
|
|
95
|
-
logger.error('Error processing Europe PMC request from queue.', requestContextService.createRequestContext({
|
|
96
|
-
operation: 'EuropePmcQueueProcess',
|
|
97
|
-
additionalContext: {
|
|
98
|
-
label: waiter.label,
|
|
99
|
-
errorMessage: err instanceof Error ? err.message : String(err),
|
|
100
|
-
},
|
|
101
|
-
}));
|
|
102
|
-
waiter.reject(err);
|
|
103
|
-
})
|
|
104
|
-
.finally(() => {
|
|
105
|
-
this.inFlight -= 1;
|
|
106
|
-
this.tryDispatch();
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
15
|
+
const MAX_CONCURRENT = 4;
|
|
16
|
+
/**
|
|
17
|
+
* Creates the pacer every Europe PMC call runs through. No queue-depth cap and no
|
|
18
|
+
* wait budget: a caller waits for its turn rather than being shed, so the pacer never
|
|
19
|
+
* rejects on its own — only the caller's signal ends a wait early.
|
|
20
|
+
*/
|
|
21
|
+
export function createEuropePmcRequestQueue(minStartGapMs) {
|
|
22
|
+
return createPacer({ name: 'europepmc', minStartGapMs, maxConcurrent: MAX_CONCURRENT });
|
|
110
23
|
}
|
|
111
24
|
//# sourceMappingURL=request-queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../../src/services/europe-pmc/request-queue.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"request-queue.js","sourceRoot":"","sources":["../../../src/services/europe-pmc/request-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAc,MAAM,8BAA8B,CAAC;AAEvE;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,aAAqB;IAC/D,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -111,7 +111,12 @@ export interface EuropePmcSearchParams {
|
|
|
111
111
|
signal?: AbortSignal;
|
|
112
112
|
/** Optional sort spec, e.g. `FIRST_PIDATE desc`. */
|
|
113
113
|
sort?: string;
|
|
114
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* Allowed sources, OR-joined into a `(SRC:"MED" OR ...)` clause ANDed with the
|
|
116
|
+
* query. A single source is repeated (`SRC:"MED" OR SRC:"MED"`), since Europe
|
|
117
|
+
* PMC matches nothing for a lone quoted `EXT_ID` clause ANDed with a lone `SRC`
|
|
118
|
+
* clause. (#175)
|
|
119
|
+
*/
|
|
115
120
|
sources?: readonly EuropePmcSource[];
|
|
116
121
|
}
|
|
117
122
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/europe-pmc/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/europe-pmc/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKnG,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,mBAAmB,EAAI;IAEtD,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA2CjB;IAED;;;;;OAKG;IACG,mBAAmB,CACvB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,iBAAiB,EACzB,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,MAAM,CAAC,CA4CjB;IAED,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,UAAU;IAMlB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAUlB,sFAAsF;IACtF,OAAO,CAAC,WAAW;IAcnB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAI3B"}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { McpError, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
8
8
|
import { httpErrorFromResponse, logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
9
|
-
import { recoveryFor } from '../error-contracts.js';
|
|
10
9
|
import { NCBI_EUTILS_BASE_URL } from './types.js';
|
|
11
10
|
/** Maximum encoded query-string length before automatically switching to POST. */
|
|
12
11
|
const POST_THRESHOLD = 2000;
|
|
@@ -51,7 +50,7 @@ export class NcbiApiClient {
|
|
|
51
50
|
if (error instanceof McpError)
|
|
52
51
|
throw error;
|
|
53
52
|
const msg = error instanceof Error ? error.message : String(error);
|
|
54
|
-
throw serviceUnavailable(`NCBI request failed: ${msg}`, { reason: 'ncbi_unreachable', endpoint
|
|
53
|
+
throw serviceUnavailable(`NCBI request failed: ${msg}`, { reason: 'ncbi_unreachable', endpoint }, { cause: error });
|
|
55
54
|
}
|
|
56
55
|
}
|
|
57
56
|
/**
|
|
@@ -92,7 +91,7 @@ export class NcbiApiClient {
|
|
|
92
91
|
if (error instanceof McpError)
|
|
93
92
|
throw error;
|
|
94
93
|
const msg = error instanceof Error ? error.message : String(error);
|
|
95
|
-
throw serviceUnavailable(`NCBI request failed: ${msg}`, { reason: 'ncbi_unreachable', url
|
|
94
|
+
throw serviceUnavailable(`NCBI request failed: ${msg}`, { reason: 'ncbi_unreachable', url }, { cause: error });
|
|
96
95
|
}
|
|
97
96
|
}
|
|
98
97
|
buildParams(params) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAEpG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/services/ncbi/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,7 +54,8 @@ export declare class NcbiService {
|
|
|
54
54
|
* a call that cannot start in time is shed at once instead of waiting it out.
|
|
55
55
|
*
|
|
56
56
|
* A caller abort rethrows the caller's own reason; every other failure is mapped
|
|
57
|
-
* onto this service's reasons by {@link toServiceError}, after the loop.
|
|
57
|
+
* onto this service's reasons by {@link toServiceError}, after the loop. Once the
|
|
58
|
+
* caller is ruled out, the loop's signal has aborted only if the deadline fired.
|
|
58
59
|
*/
|
|
59
60
|
private runPaced;
|
|
60
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ncbi-service.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/ncbi-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EAGL,KAAK,KAAK,EAGX,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"ncbi-service.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/ncbi-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EAGL,KAAK,KAAK,EAGX,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAEL,mBAAmB,EAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EAGpB,KAAK,aAAa,EAGlB,KAAK,YAAY,EAEjB,KAAK,cAAc,EACnB,KAAK,eAAe,EAGpB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAqMpB;;;GAGG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IALlC,YACmB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,mBAAmB,EACpC,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACtC;IAEE,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAoB1F;IAEK,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAO5F;IAED,MAAM,CAAC,CAAC,GAAG;QAAE,gBAAgB,CAAC,EAAE,mBAAmB,CAAA;KAAE,EACnD,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,kBAAuC,GAC/C,OAAO,CAAC,CAAC,CAAC,CAIZ;IAED,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,CAAC,CAAC,CAKZ;IAEK,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CA+BxF;IAED,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAK5E;IAED;;;;;;;;;OASG;IACG,SAAS,CACb,SAAS,EAAE,iBAAiB,EAAE,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,EAAE,CAAC,CAmE5B;IAED;;;OAGG;IACG,SAAS,CACb,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,EAAE,CAAC,CAkE5B;IAED;;;;;;;;;;;OAWG;YACW,QAAQ;IAsDtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAgBvB;AAMD,qEAAqE;AACrE,wBAAgB,eAAe,IAAI,IAAI,CAiCtC;AAED,mEAAmE;AACnE,wBAAgB,cAAc,IAAI,WAAW,CAG5C"}
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
import { JsonRpcErrorCode, McpError, rateLimited, serializationError, timeout, validationError, } from '@cyanheads/mcp-ts-core/errors';
|
|
10
10
|
import { defaultIsTransient, logger, requestContextService, withRetry, } from '@cyanheads/mcp-ts-core/utils';
|
|
11
11
|
import { getServerConfig } from '../../config/server-config.js';
|
|
12
|
-
import { recoveryFor } from '../error-contracts.js';
|
|
13
12
|
import { NcbiApiClient } from './api-client.js';
|
|
14
13
|
import { createNcbiRequestQueue } from './request-queue.js';
|
|
15
14
|
import { emptyEFetchResultFor, NcbiResponseHandler, reclassifyNcbiHttpError, } from './response-handler.js';
|
|
@@ -72,18 +71,50 @@ const QUEUE_WAIT_MARGIN_MS = 1;
|
|
|
72
71
|
* loop is a defect or a response that cannot parse — retrying it only repeats it.
|
|
73
72
|
*/
|
|
74
73
|
const isTransient = (error) => error instanceof McpError && defaultIsTransient(error);
|
|
74
|
+
/** The reason each code a retry loop can end on is stamped with; a Timeout gets none. */
|
|
75
|
+
const REASON_BY_CODE = new Map([
|
|
76
|
+
[JsonRpcErrorCode.ServiceUnavailable, 'ncbi_unreachable'],
|
|
77
|
+
[JsonRpcErrorCode.RateLimited, 'ncbi_rate_limited'],
|
|
78
|
+
]);
|
|
79
|
+
/**
|
|
80
|
+
* A retry loop that ran out, reported as its last attempt's failure: that attempt's
|
|
81
|
+
* code with `endpoint`, `attempts`, and NCBI's `ncbiErrors` when the attempt carried
|
|
82
|
+
* them. A ServiceUnavailable is stamped `ncbi_unreachable`; a RateLimited is stamped
|
|
83
|
+
* `ncbi_rate_limited` and keeps the `retryAfter` its 429 named; a Timeout keeps its
|
|
84
|
+
* code with no reason.
|
|
85
|
+
*/
|
|
86
|
+
function retriesSpent(last, message, attempts, endpoint, cause) {
|
|
87
|
+
const reason = REASON_BY_CODE.get(last.code);
|
|
88
|
+
const retryAfter = last.code === JsonRpcErrorCode.RateLimited ? last.data?.retryAfter : undefined;
|
|
89
|
+
return new McpError(last.code, message, {
|
|
90
|
+
...(reason && { reason }),
|
|
91
|
+
endpoint,
|
|
92
|
+
attempts,
|
|
93
|
+
...(last.data?.ncbiErrors !== undefined && { ncbiErrors: last.data.ncbiErrors }),
|
|
94
|
+
...(retryAfter !== undefined && { retryAfter }),
|
|
95
|
+
}, { cause });
|
|
96
|
+
}
|
|
75
97
|
/**
|
|
76
98
|
* Maps what the retry loop throws onto this service's declared failure reasons. Runs
|
|
77
99
|
* outside the loop, so the loop itself still sees the framework's `pacer_shed` — which
|
|
78
100
|
* it never retries — and `retry_deadline_exceeded`.
|
|
79
101
|
*
|
|
80
102
|
* - `pacer_shed` → `queue_full` (RateLimited), keeping the shed's `retryAfter`.
|
|
81
|
-
* - `retry_deadline_exceeded`
|
|
82
|
-
*
|
|
83
|
-
*
|
|
103
|
+
* - `retry_deadline_exceeded` with the deadline fired — mid-request, in the queue, or
|
|
104
|
+
* mid-backoff → `ncbi_deadline_exceeded` (Timeout), with NCBI's `ncbiErrors` from the
|
|
105
|
+
* latest attempt that carried any, wherever the timer landed.
|
|
106
|
+
* - `retry_deadline_exceeded` with the deadline not fired — the loop stopped because
|
|
107
|
+
* the next backoff would not fit the time left → retries spent, as below. The error's
|
|
108
|
+
* own cause or timing cannot tell the two apart (a request aborted mid-flight fails as
|
|
109
|
+
* the client's ServiceUnavailable, and timers can fire early), so `deadlineFired` — the
|
|
110
|
+
* loop's own signal — does. (#174)
|
|
111
|
+
* - Retries exhausted → retries spent: the last attempt's code and message (the
|
|
112
|
+
* framework appends the attempt count) with `endpoint`, `attempts`, and `ncbiErrors`.
|
|
113
|
+
* - A 429 never retried because its `Retry-After` outlasts the time left or the backoff
|
|
114
|
+
* cap → the attempt's own error, stamped `ncbi_rate_limited`.
|
|
84
115
|
* - Anything else — a failure that was never retried — passes through unchanged.
|
|
85
116
|
*/
|
|
86
|
-
function toServiceError(error, endpoint,
|
|
117
|
+
function toServiceError(error, endpoint, loop) {
|
|
87
118
|
if (!(error instanceof McpError))
|
|
88
119
|
return error;
|
|
89
120
|
const data = error.data ?? {};
|
|
@@ -93,22 +124,28 @@ function toServiceError(error, endpoint, deadlineMs) {
|
|
|
93
124
|
endpoint,
|
|
94
125
|
queueSize: data.queueDepth,
|
|
95
126
|
retryAfter: data.retryAfter,
|
|
96
|
-
...recoveryFor('queue_full'),
|
|
97
127
|
}, { cause: error });
|
|
98
128
|
}
|
|
99
129
|
if (data.reason === 'retry_deadline_exceeded') {
|
|
100
|
-
|
|
130
|
+
const last = error.cause;
|
|
131
|
+
const attempts = data.retryAttempts;
|
|
132
|
+
if (!loop.deadlineFired && last instanceof McpError && typeof attempts === 'number') {
|
|
133
|
+
const count = `${attempts} attempt${attempts > 1 ? 's' : ''}`;
|
|
134
|
+
return retriesSpent(last, `${last.message} (failed after ${count})`, attempts, endpoint, error);
|
|
135
|
+
}
|
|
136
|
+
return timeout(`NCBI request deadline (${loop.deadlineMs}ms) exceeded`, {
|
|
137
|
+
reason: 'ncbi_deadline_exceeded',
|
|
138
|
+
deadlineMs: loop.deadlineMs,
|
|
139
|
+
...(loop.ncbiErrors !== undefined && { ncbiErrors: loop.ncbiErrors }),
|
|
140
|
+
}, { cause: error });
|
|
101
141
|
}
|
|
102
|
-
if (typeof data.retryAttempts
|
|
103
|
-
return error;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
attempts: data.retryAttempts,
|
|
110
|
-
...(data.ncbiErrors !== undefined && { ncbiErrors: data.ncbiErrors }),
|
|
111
|
-
}, { cause: error.cause ?? error });
|
|
142
|
+
if (typeof data.retryAttempts === 'number') {
|
|
143
|
+
return retriesSpent(error, error.message, data.retryAttempts, endpoint, error.cause ?? error);
|
|
144
|
+
}
|
|
145
|
+
if (error.code === JsonRpcErrorCode.RateLimited) {
|
|
146
|
+
return new McpError(error.code, error.message, { ...data, reason: 'ncbi_rate_limited' }, { cause: error });
|
|
147
|
+
}
|
|
148
|
+
return error;
|
|
112
149
|
}
|
|
113
150
|
/**
|
|
114
151
|
* Facade over NCBI's E-utility suite. Each public method corresponds to a
|
|
@@ -317,7 +354,6 @@ export class NcbiService {
|
|
|
317
354
|
throw serializationError('Failed to parse ID Converter JSON response.', {
|
|
318
355
|
reason: 'ncbi_invalid_response',
|
|
319
356
|
responseSnippet: text.substring(0, 200),
|
|
320
|
-
...recoveryFor('ncbi_invalid_response'),
|
|
321
357
|
}, { cause: error });
|
|
322
358
|
}
|
|
323
359
|
return parsed.records ?? [];
|
|
@@ -331,16 +367,23 @@ export class NcbiService {
|
|
|
331
367
|
* a call that cannot start in time is shed at once instead of waiting it out.
|
|
332
368
|
*
|
|
333
369
|
* A caller abort rethrows the caller's own reason; every other failure is mapped
|
|
334
|
-
* onto this service's reasons by {@link toServiceError}, after the loop.
|
|
370
|
+
* onto this service's reasons by {@link toServiceError}, after the loop. Once the
|
|
371
|
+
* caller is ruled out, the loop's signal has aborted only if the deadline fired.
|
|
335
372
|
*/
|
|
336
373
|
async runPaced(endpoint, callerSignal, execute) {
|
|
337
374
|
let attempt = 0;
|
|
375
|
+
let loopSignal;
|
|
376
|
+
let ncbiErrors;
|
|
338
377
|
try {
|
|
339
378
|
return await withRetry(({ signal, remainingMs }) => {
|
|
379
|
+
loopSignal = signal;
|
|
340
380
|
attempt += 1;
|
|
341
381
|
return this.queue
|
|
342
382
|
.run(execute, { signal, maxWaitMs: remainingMs + QUEUE_WAIT_MARGIN_MS })
|
|
343
383
|
.catch((error) => {
|
|
384
|
+
if (error instanceof McpError && error.data?.ncbiErrors !== undefined) {
|
|
385
|
+
ncbiErrors = error.data.ncbiErrors;
|
|
386
|
+
}
|
|
344
387
|
if (attempt <= this.maxRetries && isTransient(error)) {
|
|
345
388
|
logger.warning(`NCBI request to ${endpoint} failed on attempt ${attempt} of ${this.maxRetries + 1}.`, requestContextService.createRequestContext({
|
|
346
389
|
operation: 'NcbiRetry',
|
|
@@ -365,7 +408,11 @@ export class NcbiService {
|
|
|
365
408
|
catch (error) {
|
|
366
409
|
if (callerSignal?.aborted)
|
|
367
410
|
throw callerSignal.reason;
|
|
368
|
-
throw toServiceError(error, endpoint,
|
|
411
|
+
throw toServiceError(error, endpoint, {
|
|
412
|
+
deadlineMs: this.totalDeadlineMs,
|
|
413
|
+
deadlineFired: loopSignal?.aborted === true,
|
|
414
|
+
ncbiErrors,
|
|
415
|
+
});
|
|
369
416
|
}
|
|
370
417
|
}
|
|
371
418
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ncbi-service.js","sourceRoot":"","sources":["../../../src/services/ncbi/ncbi-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ncbi-service.js","sourceRoot":"","sources":["../../../src/services/ncbi/ncbi-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* typically from EFetch results.
|
|
4
4
|
* @module src/services/ncbi/parsing/article-parser
|
|
5
5
|
*/
|
|
6
|
-
import type { ParsedArticle, ParsedArticleAuthor, ParsedArticleDate, ParsedBookInfo, ParsedGrant, ParsedJournalInfo, ParsedMeshTerm, ParseFullArticleOptions, XmlArticle, XmlArticleIdList, XmlAuthorList, XmlBookDocument, XmlGrantList, XmlJournal, XmlKeywordList, XmlMedlineCitation, XmlMeshHeadingList, XmlPublicationTypeList, XmlPubmedArticle, XmlPubmedArticleSet, XmlPubmedBookArticle } from '../types.js';
|
|
6
|
+
import type { ParsedArticle, ParsedArticleAuthor, ParsedArticleDate, ParsedBookInfo, ParsedCommentsCorrection, ParsedGrant, ParsedJournalInfo, ParsedMeshTerm, ParseFullArticleOptions, XmlArticle, XmlArticleIdList, XmlAuthorList, XmlBookDocument, XmlCommentsCorrectionsList, XmlGrantList, XmlJournal, XmlKeywordList, XmlMedlineCitation, XmlMeshHeadingList, XmlPublicationTypeList, XmlPubmedArticle, XmlPubmedArticleSet, XmlPubmedBookArticle } from '../types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Result of extracting authors with deduplicated affiliations.
|
|
9
9
|
*/
|
|
@@ -61,6 +61,20 @@ export declare function extractPmcId(articleXml?: XmlArticle, pubmedDataArticleI
|
|
|
61
61
|
* @returns An array of publication type strings.
|
|
62
62
|
*/
|
|
63
63
|
export declare function extractPublicationTypes(publicationTypeListXml?: XmlPublicationTypeList): string[];
|
|
64
|
+
/**
|
|
65
|
+
* Extracts the linked notices from `MedlineCitation/CommentsCorrectionsList` —
|
|
66
|
+
* retractions, errata, expressions of concern, comments, updates — in upstream
|
|
67
|
+
* order. `Cites` entries are dropped: they list a bibliography rather than a
|
|
68
|
+
* linked record, which NLM now carries in `PubmedData/ReferenceList`. (#178)
|
|
69
|
+
*
|
|
70
|
+
* `RefSource` and `Note` reach this function as the text NCBI wrote: the response
|
|
71
|
+
* handler exempts both from numeric coercion, which would otherwise reduce `007` to
|
|
72
|
+
* `7`. A `PMID` is still coerced, and `getText` turns it back into a string — PMIDs
|
|
73
|
+
* carry no leading zeros, so none is lost.
|
|
74
|
+
* @param commentsCorrectionsListXml - The XML CommentsCorrectionsList element.
|
|
75
|
+
* @returns The linked notices; empty when the record carries none.
|
|
76
|
+
*/
|
|
77
|
+
export declare function extractCommentsCorrections(commentsCorrectionsListXml?: XmlCommentsCorrectionsList): ParsedCommentsCorrection[];
|
|
64
78
|
/**
|
|
65
79
|
* Extracts keywords from XML. Handles single or multiple KeywordList elements.
|
|
66
80
|
* @param keywordListsXml - The XML KeywordList element or an array of them.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-parser.d.ts","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/article-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EAEjB,cAAc,EACd,WAAW,EACX,iBAAiB,EAEjB,cAAc,EACd,uBAAuB,EAEvB,UAAU,EAEV,gBAAgB,EAEhB,aAAa,EACb,eAAe,
|
|
1
|
+
{"version":3,"file":"article-parser.d.ts","sourceRoot":"","sources":["../../../../src/services/ncbi/parsing/article-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EAEjB,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EAEjB,cAAc,EACd,uBAAuB,EAEvB,UAAU,EAEV,gBAAgB,EAEhB,aAAa,EACb,eAAe,EACf,0BAA0B,EAE1B,YAAY,EAEZ,UAAU,EAEV,cAAc,EACd,kBAAkB,EAElB,kBAAkB,EAGlB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAUrB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAqD9E;AA2BD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,UAAU,GACtB,iBAAiB,GAAG,SAAS,CAmC/B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,cAAc,EAAE,CA8B1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,WAAW,EAAE,CAmBxE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,UAAU,CAAC,EAAE,UAAU,EACvB,uBAAuB,CAAC,EAAE,gBAAgB,GACzC,MAAM,GAAG,SAAS,CAyCpB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,UAAU,CAAC,EAAE,UAAU,EACvB,uBAAuB,CAAC,EAAE,gBAAgB,GACzC,MAAM,GAAG,SAAS,CAsBpB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,sBAAsB,CAAC,EAAE,sBAAsB,GAAG,MAAM,EAAE,CAIjG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,0BAA0B,CAAC,EAAE,0BAA0B,GACtD,wBAAwB,EAAE,CAa5B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,eAAe,CAAC,EAAE,cAAc,EAAE,GAAG,cAAc,GAAG,MAAM,EAAE,CAa7F;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,SAAS,CAyB5F;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAGvF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,iBAAiB,EAAE,CAShF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,GAAE,uBAA4B,GACpC,aAAa,CAoCf;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,cAAc,CAgDhF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,oBAAoB,GAAG,aAAa,CAsDxF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,mBAAmB,GAAG,SAAS,EAC3C,OAAO,GAAE,uBAA4B,GACpC,aAAa,EAAE,CAejB"}
|
|
@@ -276,6 +276,33 @@ export function extractPublicationTypes(publicationTypeListXml) {
|
|
|
276
276
|
const pubTypes = ensureArray(publicationTypeListXml.PublicationType);
|
|
277
277
|
return pubTypes.map((pt) => getText(pt)).filter(Boolean);
|
|
278
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Extracts the linked notices from `MedlineCitation/CommentsCorrectionsList` —
|
|
281
|
+
* retractions, errata, expressions of concern, comments, updates — in upstream
|
|
282
|
+
* order. `Cites` entries are dropped: they list a bibliography rather than a
|
|
283
|
+
* linked record, which NLM now carries in `PubmedData/ReferenceList`. (#178)
|
|
284
|
+
*
|
|
285
|
+
* `RefSource` and `Note` reach this function as the text NCBI wrote: the response
|
|
286
|
+
* handler exempts both from numeric coercion, which would otherwise reduce `007` to
|
|
287
|
+
* `7`. A `PMID` is still coerced, and `getText` turns it back into a string — PMIDs
|
|
288
|
+
* carry no leading zeros, so none is lost.
|
|
289
|
+
* @param commentsCorrectionsListXml - The XML CommentsCorrectionsList element.
|
|
290
|
+
* @returns The linked notices; empty when the record carries none.
|
|
291
|
+
*/
|
|
292
|
+
export function extractCommentsCorrections(commentsCorrectionsListXml) {
|
|
293
|
+
return ensureArray(commentsCorrectionsListXml?.CommentsCorrections)
|
|
294
|
+
.filter((entry) => getAttribute(entry, 'RefType') !== 'Cites')
|
|
295
|
+
.map((entry) => {
|
|
296
|
+
const pmid = getOptionalText(entry.PMID);
|
|
297
|
+
const note = getOptionalText(entry.Note);
|
|
298
|
+
return {
|
|
299
|
+
refType: getAttribute(entry, 'RefType'),
|
|
300
|
+
refSource: getText(entry.RefSource),
|
|
301
|
+
...(pmid && { pmid }),
|
|
302
|
+
...(note && { note }),
|
|
303
|
+
};
|
|
304
|
+
});
|
|
305
|
+
}
|
|
279
306
|
/**
|
|
280
307
|
* Extracts keywords from XML. Handles single or multiple KeywordList elements.
|
|
281
308
|
* @param keywordListsXml - The XML KeywordList element or an array of them.
|
|
@@ -372,6 +399,7 @@ export function parseFullArticle(xmlArticle, options = {}) {
|
|
|
372
399
|
const pmcId = extractPmcId(article, pubmedDataArticleIdList);
|
|
373
400
|
const { authors, affiliations } = extractAuthors(article?.AuthorList);
|
|
374
401
|
const publicationTypes = extractPublicationTypes(article?.PublicationTypeList);
|
|
402
|
+
const commentsCorrections = extractCommentsCorrections(medlineCitation?.CommentsCorrectionsList);
|
|
375
403
|
const keywords = extractKeywords(medlineCitation?.KeywordList ?? article?.KeywordList);
|
|
376
404
|
const articleDates = extractArticleDates(article);
|
|
377
405
|
const meshTerms = includeMesh ? extractMeshTerms(medlineCitation?.MeshHeadingList) : undefined;
|
|
@@ -385,6 +413,7 @@ export function parseFullArticle(xmlArticle, options = {}) {
|
|
|
385
413
|
authors,
|
|
386
414
|
...(journalInfo !== undefined && { journalInfo }),
|
|
387
415
|
...(publicationTypes.length > 0 && { publicationTypes }),
|
|
416
|
+
...(commentsCorrections.length > 0 && { commentsCorrections }),
|
|
388
417
|
...(keywords.length > 0 && { keywords }),
|
|
389
418
|
...(meshTerms !== undefined && meshTerms.length > 0 && { meshTerms }),
|
|
390
419
|
...(grantList !== undefined && grantList.length > 0 && { grantList }),
|