@cyanheads/pubmed-mcp-server 2.10.18 → 2.10.20
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 +16 -15
- package/CLAUDE.md +16 -15
- package/Dockerfile +86 -36
- package/README.md +86 -109
- package/changelog/2.10.x/2.10.19.md +42 -0
- package/changelog/2.10.x/2.10.20.md +63 -0
- 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/_text.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_text.js +10 -5
- package/dist/mcp-server/tools/definitions/_text.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 +68 -15
- package/dist/mcp-server/tools/definitions/fetch-articles.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts +37 -12
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js +590 -481
- package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.d.ts +5 -5
- package/dist/mcp-server/tools/definitions/find-related.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/find-related.tool.js +31 -13
- 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 +26 -21
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.js +109 -55
- package/dist/mcp-server/tools/definitions/lookup-citation.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts +15 -7
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/lookup-mesh.tool.js +19 -11
- 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 +20 -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 +98 -14
- 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 +21 -6
- 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 +42 -10
- 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 +42 -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 +220 -48
- package/dist/mcp-server/tools/definitions/search-articles.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts +15 -7
- package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/spell-check.tool.js +13 -9
- package/dist/mcp-server/tools/definitions/spell-check.tool.js.map +1 -1
- package/dist/services/error-contracts.d.ts +43 -72
- package/dist/services/error-contracts.d.ts.map +1 -1
- package/dist/services/error-contracts.js +44 -76
- 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 +25 -2
- package/dist/services/europe-pmc/europe-pmc-service.d.ts.map +1 -1
- package/dist/services/europe-pmc/europe-pmc-service.js +90 -25
- package/dist/services/europe-pmc/europe-pmc-service.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/formatting/citation-formatter.d.ts +24 -0
- package/dist/services/ncbi/formatting/citation-formatter.d.ts.map +1 -1
- package/dist/services/ncbi/formatting/citation-formatter.js +147 -46
- package/dist/services/ncbi/formatting/citation-formatter.js.map +1 -1
- package/dist/services/ncbi/ncbi-service.d.ts +18 -2
- package/dist/services/ncbi/ncbi-service.d.ts.map +1 -1
- package/dist/services/ncbi/ncbi-service.js +182 -90
- 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 +67 -29
- package/dist/services/ncbi/parsing/article-parser.js.map +1 -1
- package/dist/services/ncbi/parsing/esummary-parser.d.ts +9 -0
- package/dist/services/ncbi/parsing/esummary-parser.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/esummary-parser.js +26 -2
- package/dist/services/ncbi/parsing/esummary-parser.js.map +1 -1
- package/dist/services/ncbi/parsing/pmc-article-parser.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/pmc-article-parser.js +395 -147
- package/dist/services/ncbi/parsing/pmc-article-parser.js.map +1 -1
- package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts +73 -5
- package/dist/services/ncbi/parsing/pmc-xml-helpers.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/pmc-xml-helpers.js +223 -27
- package/dist/services/ncbi/parsing/pmc-xml-helpers.js.map +1 -1
- package/dist/services/ncbi/parsing/text-helpers.d.ts +8 -6
- package/dist/services/ncbi/parsing/text-helpers.d.ts.map +1 -1
- package/dist/services/ncbi/parsing/text-helpers.js +95 -19
- package/dist/services/ncbi/parsing/text-helpers.js.map +1 -1
- package/dist/services/ncbi/response-handler.d.ts +20 -12
- package/dist/services/ncbi/response-handler.d.ts.map +1 -1
- package/dist/services/ncbi/response-handler.js +134 -38
- package/dist/services/ncbi/response-handler.js.map +1 -1
- package/dist/services/ncbi/types.d.ts +35 -2
- 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 +10 -6
- package/dist/services/openalex/openalex-service.d.ts.map +1 -1
- package/dist/services/openalex/openalex-service.js +14 -12
- 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 +16 -13
- package/server.json +10 -24
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
* deadline that covers queue wait, attempts, and backoff. Uses init/accessor pattern.
|
|
7
7
|
* @module src/services/ncbi/ncbi-service
|
|
8
8
|
*/
|
|
9
|
-
import { JsonRpcErrorCode, McpError, rateLimited, serializationError, timeout, validationError, } from '@cyanheads/mcp-ts-core/errors';
|
|
9
|
+
import { invalidParams, 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';
|
|
@@ -41,19 +40,63 @@ function normalizeDiagnosticList(list) {
|
|
|
41
40
|
return normalized;
|
|
42
41
|
}
|
|
43
42
|
/**
|
|
44
|
-
* The tracking token
|
|
45
|
-
*
|
|
43
|
+
* The tracking token a citation is submitted to ECitMatch under — echoed back
|
|
44
|
+
* verbatim on that citation's response row, and unique within the call.
|
|
46
45
|
*
|
|
47
|
-
* Always the citation's 1-based position, never
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
46
|
+
* Always the citation's 1-based position in the call, never
|
|
47
|
+
* `ECitMatchCitation.key`, and the same in every request that carries it, so a
|
|
48
|
+
* re-requested line reconciles without renumbering (#193). The label is
|
|
49
|
+
* caller-supplied, so reconciling response rows on it collapses two citations
|
|
50
|
+
* carrying the same label onto one row and hands the second citation's PMID to
|
|
51
|
+
* the first (#113); and a `|` inside it shifts the pipe-delimited field layout
|
|
52
|
+
* of the submitted line, so NCBI's echoed row no longer reconciles and a
|
|
53
|
+
* citation it matched comes back as not_found (#125). Keeping the label off the
|
|
54
|
+
* wire entirely removes both.
|
|
54
55
|
*/
|
|
55
|
-
function
|
|
56
|
-
return
|
|
56
|
+
function wireKeyFor(index) {
|
|
57
|
+
return String(index + 1);
|
|
58
|
+
}
|
|
59
|
+
/** One submitted citation as an ECitMatch `bdata` line. */
|
|
60
|
+
function bdataLine(c, index) {
|
|
61
|
+
return `${c.journal ?? ''}|${c.year ?? ''}|${c.volume ?? ''}|${c.firstPage ?? ''}|${c.authorName ?? ''}|${wireKeyFor(index)}|`;
|
|
62
|
+
}
|
|
63
|
+
/** ECitMatch's response rows, each carrying the wire key its line was submitted under. */
|
|
64
|
+
function parseECitMatchRows(text) {
|
|
65
|
+
return text
|
|
66
|
+
.split(/[\r\n]+/)
|
|
67
|
+
.filter((line) => line.trim().length > 0)
|
|
68
|
+
.map((line) => {
|
|
69
|
+
const parts = line.split('|');
|
|
70
|
+
const key = parts[5]?.trim() ?? '';
|
|
71
|
+
const rawOutcome = parts[6]?.trim() ?? '';
|
|
72
|
+
if (/^\d+$/.test(rawOutcome)) {
|
|
73
|
+
return { key, matched: true, pmid: rawOutcome, status: 'matched' };
|
|
74
|
+
}
|
|
75
|
+
if (rawOutcome.startsWith('AMBIGUOUS')) {
|
|
76
|
+
const csv = /^AMBIGUOUS\s+([\d,\s]+)/.exec(rawOutcome)?.[1];
|
|
77
|
+
const candidatePmids = csv
|
|
78
|
+
? csv
|
|
79
|
+
.split(',')
|
|
80
|
+
.map((p) => p.trim())
|
|
81
|
+
.filter((p) => /^\d+$/.test(p))
|
|
82
|
+
: undefined;
|
|
83
|
+
return {
|
|
84
|
+
key,
|
|
85
|
+
matched: false,
|
|
86
|
+
pmid: null,
|
|
87
|
+
status: 'ambiguous',
|
|
88
|
+
detail: rawOutcome,
|
|
89
|
+
...(candidatePmids?.length && { candidatePmids }),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
key,
|
|
94
|
+
matched: false,
|
|
95
|
+
pmid: null,
|
|
96
|
+
status: 'not_found',
|
|
97
|
+
...(rawOutcome && { detail: rawOutcome }),
|
|
98
|
+
};
|
|
99
|
+
});
|
|
57
100
|
}
|
|
58
101
|
/** Ceiling on one backoff sleep, so a high retry count cannot grow it without bound. */
|
|
59
102
|
const MAX_BACKOFF_MS = 30_000;
|
|
@@ -72,18 +115,50 @@ const QUEUE_WAIT_MARGIN_MS = 1;
|
|
|
72
115
|
* loop is a defect or a response that cannot parse — retrying it only repeats it.
|
|
73
116
|
*/
|
|
74
117
|
const isTransient = (error) => error instanceof McpError && defaultIsTransient(error);
|
|
118
|
+
/** The reason each code a retry loop can end on is stamped with; a Timeout gets none. */
|
|
119
|
+
const REASON_BY_CODE = new Map([
|
|
120
|
+
[JsonRpcErrorCode.ServiceUnavailable, 'ncbi_unreachable'],
|
|
121
|
+
[JsonRpcErrorCode.RateLimited, 'ncbi_rate_limited'],
|
|
122
|
+
]);
|
|
123
|
+
/**
|
|
124
|
+
* A retry loop that ran out, reported as its last attempt's failure: that attempt's
|
|
125
|
+
* code with `endpoint`, `attempts`, and NCBI's `ncbiErrors` when the attempt carried
|
|
126
|
+
* them. A ServiceUnavailable is stamped `ncbi_unreachable`; a RateLimited is stamped
|
|
127
|
+
* `ncbi_rate_limited` and keeps the `retryAfter` its 429 named; a Timeout keeps its
|
|
128
|
+
* code with no reason.
|
|
129
|
+
*/
|
|
130
|
+
function retriesSpent(last, message, attempts, endpoint, cause) {
|
|
131
|
+
const reason = REASON_BY_CODE.get(last.code);
|
|
132
|
+
const retryAfter = last.code === JsonRpcErrorCode.RateLimited ? last.data?.retryAfter : undefined;
|
|
133
|
+
return new McpError(last.code, message, {
|
|
134
|
+
...(reason && { reason }),
|
|
135
|
+
endpoint,
|
|
136
|
+
attempts,
|
|
137
|
+
...(last.data?.ncbiErrors !== undefined && { ncbiErrors: last.data.ncbiErrors }),
|
|
138
|
+
...(retryAfter !== undefined && { retryAfter }),
|
|
139
|
+
}, { cause });
|
|
140
|
+
}
|
|
75
141
|
/**
|
|
76
142
|
* Maps what the retry loop throws onto this service's declared failure reasons. Runs
|
|
77
143
|
* outside the loop, so the loop itself still sees the framework's `pacer_shed` — which
|
|
78
144
|
* it never retries — and `retry_deadline_exceeded`.
|
|
79
145
|
*
|
|
80
146
|
* - `pacer_shed` → `queue_full` (RateLimited), keeping the shed's `retryAfter`.
|
|
81
|
-
* - `retry_deadline_exceeded`
|
|
82
|
-
*
|
|
83
|
-
*
|
|
147
|
+
* - `retry_deadline_exceeded` with the deadline fired — mid-request, in the queue, or
|
|
148
|
+
* mid-backoff → `ncbi_deadline_exceeded` (Timeout), with NCBI's `ncbiErrors` from the
|
|
149
|
+
* latest attempt that carried any, wherever the timer landed.
|
|
150
|
+
* - `retry_deadline_exceeded` with the deadline not fired — the loop stopped because
|
|
151
|
+
* the next backoff would not fit the time left → retries spent, as below. The error's
|
|
152
|
+
* own cause or timing cannot tell the two apart (a request aborted mid-flight fails as
|
|
153
|
+
* the client's ServiceUnavailable, and timers can fire early), so `deadlineFired` — the
|
|
154
|
+
* loop's own signal — does. (#174)
|
|
155
|
+
* - Retries exhausted → retries spent: the last attempt's code and message (the
|
|
156
|
+
* framework appends the attempt count) with `endpoint`, `attempts`, and `ncbiErrors`.
|
|
157
|
+
* - A 429 never retried because its `Retry-After` outlasts the time left or the backoff
|
|
158
|
+
* cap → the attempt's own error, stamped `ncbi_rate_limited`.
|
|
84
159
|
* - Anything else — a failure that was never retried — passes through unchanged.
|
|
85
160
|
*/
|
|
86
|
-
function toServiceError(error, endpoint,
|
|
161
|
+
function toServiceError(error, endpoint, loop) {
|
|
87
162
|
if (!(error instanceof McpError))
|
|
88
163
|
return error;
|
|
89
164
|
const data = error.data ?? {};
|
|
@@ -93,22 +168,28 @@ function toServiceError(error, endpoint, deadlineMs) {
|
|
|
93
168
|
endpoint,
|
|
94
169
|
queueSize: data.queueDepth,
|
|
95
170
|
retryAfter: data.retryAfter,
|
|
96
|
-
...recoveryFor('queue_full'),
|
|
97
171
|
}, { cause: error });
|
|
98
172
|
}
|
|
99
173
|
if (data.reason === 'retry_deadline_exceeded') {
|
|
100
|
-
|
|
174
|
+
const last = error.cause;
|
|
175
|
+
const attempts = data.retryAttempts;
|
|
176
|
+
if (!loop.deadlineFired && last instanceof McpError && typeof attempts === 'number') {
|
|
177
|
+
const count = `${attempts} attempt${attempts > 1 ? 's' : ''}`;
|
|
178
|
+
return retriesSpent(last, `${last.message} (failed after ${count})`, attempts, endpoint, error);
|
|
179
|
+
}
|
|
180
|
+
return timeout(`NCBI request deadline (${loop.deadlineMs}ms) exceeded`, {
|
|
181
|
+
reason: 'ncbi_deadline_exceeded',
|
|
182
|
+
deadlineMs: loop.deadlineMs,
|
|
183
|
+
...(loop.ncbiErrors !== undefined && { ncbiErrors: loop.ncbiErrors }),
|
|
184
|
+
}, { cause: error });
|
|
101
185
|
}
|
|
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 });
|
|
186
|
+
if (typeof data.retryAttempts === 'number') {
|
|
187
|
+
return retriesSpent(error, error.message, data.retryAttempts, endpoint, error.cause ?? error);
|
|
188
|
+
}
|
|
189
|
+
if (error.code === JsonRpcErrorCode.RateLimited) {
|
|
190
|
+
return new McpError(error.code, error.message, { ...data, reason: 'ncbi_rate_limited' }, { cause: error });
|
|
191
|
+
}
|
|
192
|
+
return error;
|
|
112
193
|
}
|
|
113
194
|
/**
|
|
114
195
|
* Facade over NCBI's E-utility suite. Each public method corresponds to a
|
|
@@ -203,60 +284,50 @@ export class NcbiService {
|
|
|
203
284
|
*
|
|
204
285
|
* Results come back one per submitted citation, in submission order, carrying
|
|
205
286
|
* the caller's `key`. Correlation runs on the wire key (see
|
|
206
|
-
* {@link
|
|
287
|
+
* {@link wireKeyFor}), never on `key` itself — that label is caller-supplied,
|
|
207
288
|
* so it may repeat and may carry characters that break the wire format.
|
|
208
289
|
* (#113, #125)
|
|
290
|
+
*
|
|
291
|
+
* A journal-less citation ECitMatch finds no candidate for ends the response:
|
|
292
|
+
* that line and every line after it come back with no row. So the response
|
|
293
|
+
* stops at the line after the last one answered; that line is reported
|
|
294
|
+
* `not_found`, and the lines after it are requested again without it, until
|
|
295
|
+
* every line has a result. A complete response costs one request, each
|
|
296
|
+
* dropped line at most one more — 25 requests for 25 such citations. Every
|
|
297
|
+
* request draws on one deadline and one retry allowance for the whole call.
|
|
298
|
+
* A line with no row ahead of one that has a row is not a stop and is never
|
|
299
|
+
* re-requested; it stays `not_found`, as every missing row did before. (#54, #193)
|
|
209
300
|
*/
|
|
210
301
|
async eCitMatch(citations, options) {
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
.
|
|
214
|
-
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
.
|
|
219
|
-
.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
.filter((p) => /^\d+$/.test(p))
|
|
233
|
-
: undefined;
|
|
234
|
-
return {
|
|
235
|
-
key,
|
|
236
|
-
matched: false,
|
|
237
|
-
pmid: null,
|
|
238
|
-
status: 'ambiguous',
|
|
239
|
-
detail: rawOutcome,
|
|
240
|
-
...(candidatePmids?.length && { candidatePmids }),
|
|
241
|
-
};
|
|
302
|
+
const budget = {
|
|
303
|
+
expiresAt: Date.now() + this.totalDeadlineMs,
|
|
304
|
+
retriesLeft: this.maxRetries,
|
|
305
|
+
};
|
|
306
|
+
const rowByIndex = new Map();
|
|
307
|
+
let pending = citations.map((citation, index) => ({ citation, index }));
|
|
308
|
+
while (pending.length > 0) {
|
|
309
|
+
const bdata = pending.map(({ citation, index }) => bdataLine(citation, index)).join('\r');
|
|
310
|
+
const text = await this.performRequest('ecitmatch.cgi', { db: 'pubmed', retmode: 'xml', bdata }, { retmode: 'text', ...(options?.signal && { signal: options.signal }) }, budget);
|
|
311
|
+
// Reconcile on the wire key each line was submitted under — unique within
|
|
312
|
+
// the call, so one row can never stand in for a second citation. The line
|
|
313
|
+
// after the last one answered is where the response stopped: it keeps no
|
|
314
|
+
// row, and only the lines after it go out again.
|
|
315
|
+
const rowByWireKey = new Map(parseECitMatchRows(text).map((r) => [r.key, r]));
|
|
316
|
+
let lastAnswered = -1;
|
|
317
|
+
for (const [position, { index }] of pending.entries()) {
|
|
318
|
+
const row = rowByWireKey.get(wireKeyFor(index));
|
|
319
|
+
if (!row)
|
|
320
|
+
continue;
|
|
321
|
+
rowByIndex.set(index, row);
|
|
322
|
+
lastAnswered = position;
|
|
242
323
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
...(rawOutcome && { detail: rawOutcome }),
|
|
249
|
-
};
|
|
250
|
-
});
|
|
251
|
-
// ECitMatch omits lines for citations it cannot classify. Reconcile on the
|
|
252
|
-
// wire key each citation was submitted under — unique within the request, so
|
|
253
|
-
// one row can never stand in for a second citation — then restore the
|
|
254
|
-
// caller's label on the way out. Every input gets a result row, so callers
|
|
255
|
-
// can rely on results.length === citations.length and on results[i]
|
|
256
|
-
// describing citations[i]. (#54, #113, #125)
|
|
257
|
-
const parsedByWireKey = new Map(parsed.map((r) => [r.key, r]));
|
|
324
|
+
pending = pending.slice(lastAnswered + 2);
|
|
325
|
+
}
|
|
326
|
+
// Every input gets a result row, so callers can rely on results.length ===
|
|
327
|
+
// citations.length and on results[i] describing citations[i]; the caller's
|
|
328
|
+
// label is restored on the way out. (#54, #113, #125)
|
|
258
329
|
return citations.map((c, i) => {
|
|
259
|
-
const row =
|
|
330
|
+
const row = rowByIndex.get(i);
|
|
260
331
|
return row
|
|
261
332
|
? { ...row, key: c.key }
|
|
262
333
|
: { key: c.key, matched: false, pmid: null, status: 'not_found' };
|
|
@@ -298,14 +369,15 @@ export class NcbiService {
|
|
|
298
369
|
}
|
|
299
370
|
catch (error) {
|
|
300
371
|
// PMC ID Converter returns 400 (InvalidParams) for malformed inputs and
|
|
301
|
-
// leaks the upstream HTML/text body into `data.body`. Rewrite
|
|
302
|
-
//
|
|
372
|
+
// leaks the upstream HTML/text body into `data.body`. Rewrite the message
|
|
373
|
+
// with idType-specific guidance and drop the leaky body, keeping the
|
|
374
|
+
// InvalidParams code every other NCBI 400 carries.
|
|
303
375
|
if (error instanceof McpError && error.code === JsonRpcErrorCode.InvalidParams) {
|
|
304
376
|
const hint = ID_CONVERT_FORMAT_HINTS[idtype ?? ''];
|
|
305
377
|
const message = hint
|
|
306
378
|
? `PMC ID Converter rejected one or more inputs as malformed (idType="${idtype}"). Expected: ${hint}.`
|
|
307
379
|
: `PMC ID Converter rejected the input as malformed (idType="${idtype ?? 'unspecified'}").`;
|
|
308
|
-
throw
|
|
380
|
+
throw invalidParams(message, { idType: idtype, idCount: ids.length }, { cause: error });
|
|
309
381
|
}
|
|
310
382
|
throw error;
|
|
311
383
|
}
|
|
@@ -317,7 +389,6 @@ export class NcbiService {
|
|
|
317
389
|
throw serializationError('Failed to parse ID Converter JSON response.', {
|
|
318
390
|
reason: 'ncbi_invalid_response',
|
|
319
391
|
responseSnippet: text.substring(0, 200),
|
|
320
|
-
...recoveryFor('ncbi_invalid_response'),
|
|
321
392
|
}, { cause: error });
|
|
322
393
|
}
|
|
323
394
|
return parsed.records ?? [];
|
|
@@ -330,19 +401,32 @@ export class NcbiService {
|
|
|
330
401
|
* and the HTTP request, and each attempt offers the queue only the time left, so
|
|
331
402
|
* a call that cannot start in time is shed at once instead of waiting it out.
|
|
332
403
|
*
|
|
404
|
+
* With a `budget`, the request is one of several in a call: its deadline is the
|
|
405
|
+
* time the call has left and its retries are the ones the call has not spent,
|
|
406
|
+
* which it then spends from. A failure is still reported against the call's
|
|
407
|
+
* full deadline.
|
|
408
|
+
*
|
|
333
409
|
* 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.
|
|
410
|
+
* onto this service's reasons by {@link toServiceError}, after the loop. Once the
|
|
411
|
+
* caller is ruled out, the loop's signal has aborted only if the deadline fired.
|
|
335
412
|
*/
|
|
336
|
-
async runPaced(endpoint, callerSignal, execute) {
|
|
413
|
+
async runPaced(endpoint, callerSignal, execute, budget) {
|
|
414
|
+
const maxRetries = budget?.retriesLeft ?? this.maxRetries;
|
|
337
415
|
let attempt = 0;
|
|
416
|
+
let loopSignal;
|
|
417
|
+
let ncbiErrors;
|
|
338
418
|
try {
|
|
339
419
|
return await withRetry(({ signal, remainingMs }) => {
|
|
420
|
+
loopSignal = signal;
|
|
340
421
|
attempt += 1;
|
|
341
422
|
return this.queue
|
|
342
423
|
.run(execute, { signal, maxWaitMs: remainingMs + QUEUE_WAIT_MARGIN_MS })
|
|
343
424
|
.catch((error) => {
|
|
344
|
-
if (
|
|
345
|
-
|
|
425
|
+
if (error instanceof McpError && error.data?.ncbiErrors !== undefined) {
|
|
426
|
+
ncbiErrors = error.data.ncbiErrors;
|
|
427
|
+
}
|
|
428
|
+
if (attempt <= maxRetries && isTransient(error)) {
|
|
429
|
+
logger.warning(`NCBI request to ${endpoint} failed on attempt ${attempt} of ${maxRetries + 1}.`, requestContextService.createRequestContext({
|
|
346
430
|
operation: 'NcbiRetry',
|
|
347
431
|
additionalContext: {
|
|
348
432
|
endpoint,
|
|
@@ -354,9 +438,9 @@ export class NcbiService {
|
|
|
354
438
|
throw error;
|
|
355
439
|
});
|
|
356
440
|
}, {
|
|
357
|
-
maxRetries
|
|
441
|
+
maxRetries,
|
|
358
442
|
maxDelayMs: MAX_BACKOFF_MS,
|
|
359
|
-
deadlineMs: this.totalDeadlineMs,
|
|
443
|
+
deadlineMs: budget ? Math.max(0, budget.expiresAt - Date.now()) : this.totalDeadlineMs,
|
|
360
444
|
isTransient,
|
|
361
445
|
operation: `NCBI ${endpoint}`,
|
|
362
446
|
...(callerSignal && { signal: callerSignal }),
|
|
@@ -365,7 +449,15 @@ export class NcbiService {
|
|
|
365
449
|
catch (error) {
|
|
366
450
|
if (callerSignal?.aborted)
|
|
367
451
|
throw callerSignal.reason;
|
|
368
|
-
throw toServiceError(error, endpoint,
|
|
452
|
+
throw toServiceError(error, endpoint, {
|
|
453
|
+
deadlineMs: this.totalDeadlineMs,
|
|
454
|
+
deadlineFired: loopSignal?.aborted === true,
|
|
455
|
+
ncbiErrors,
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
finally {
|
|
459
|
+
if (budget)
|
|
460
|
+
budget.retriesLeft -= attempt - 1;
|
|
369
461
|
}
|
|
370
462
|
}
|
|
371
463
|
/**
|
|
@@ -373,7 +465,7 @@ export class NcbiService {
|
|
|
373
465
|
* all-invalid-ID rejection resolves as the empty set NCBI returns for an unknown
|
|
374
466
|
* ID, and a backend-failure envelope is reclassified as transient so it retries.
|
|
375
467
|
*/
|
|
376
|
-
performRequest(endpoint, params, options) {
|
|
468
|
+
performRequest(endpoint, params, options, budget) {
|
|
377
469
|
return this.runPaced(endpoint, options?.signal, async (signal) => {
|
|
378
470
|
const text = await this.apiClient
|
|
379
471
|
.makeRequest(endpoint, params, { ...options, signal })
|
|
@@ -384,7 +476,7 @@ export class NcbiService {
|
|
|
384
476
|
throw reclassifyNcbiHttpError(error, endpoint);
|
|
385
477
|
});
|
|
386
478
|
return this.responseHandler.parseAndHandleResponse(text, endpoint, options);
|
|
387
|
-
});
|
|
479
|
+
}, budget);
|
|
388
480
|
}
|
|
389
481
|
}
|
|
390
482
|
// ─── Init / Accessor ────────────────────────────────────────────────────────
|
|
@@ -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,CAsD9E;AA2BD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,CAAC,EAAE,UAAU,EACvB,UAAU,CAAC,EAAE,UAAU,GACtB,iBAAiB,GAAG,SAAS,CA0C/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,CAmDxF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,mBAAmB,GAAG,SAAS,EAC3C,OAAO,GAAE,uBAA4B,GACpC,aAAa,EAAE,CAejB"}
|