@cyanheads/pubmed-mcp-server 2.10.13 → 2.10.15

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 (154) hide show
  1. package/AGENTS.md +24 -6
  2. package/CLAUDE.md +24 -6
  3. package/README.md +7 -7
  4. package/changelog/2.0.x/2.0.0.md +32 -0
  5. package/changelog/2.0.x/2.0.1.md +32 -0
  6. package/changelog/2.1.x/2.1.0.md +17 -0
  7. package/changelog/2.1.x/2.1.1.md +29 -0
  8. package/changelog/2.1.x/2.1.2.md +18 -0
  9. package/changelog/2.1.x/2.1.3.md +10 -0
  10. package/changelog/2.1.x/2.1.4.md +12 -0
  11. package/changelog/2.1.x/2.1.5.md +18 -0
  12. package/changelog/2.1.x/2.1.6.md +15 -0
  13. package/changelog/2.10.x/2.10.0.md +17 -0
  14. package/changelog/2.10.x/2.10.1.md +14 -0
  15. package/changelog/2.10.x/2.10.10.md +22 -0
  16. package/changelog/2.10.x/2.10.11.md +21 -0
  17. package/changelog/2.10.x/2.10.12.md +14 -0
  18. package/changelog/2.10.x/2.10.13.md +28 -0
  19. package/changelog/2.10.x/2.10.14.md +29 -0
  20. package/changelog/2.10.x/2.10.15.md +28 -0
  21. package/changelog/2.10.x/2.10.2.md +13 -0
  22. package/changelog/2.10.x/2.10.3.md +26 -0
  23. package/changelog/2.10.x/2.10.4.md +11 -0
  24. package/changelog/2.10.x/2.10.5.md +31 -0
  25. package/changelog/2.10.x/2.10.6.md +30 -0
  26. package/changelog/2.10.x/2.10.7.md +17 -0
  27. package/changelog/2.10.x/2.10.8.md +22 -0
  28. package/changelog/2.10.x/2.10.9.md +15 -0
  29. package/changelog/2.2.x/2.2.0.md +67 -0
  30. package/changelog/2.2.x/2.2.1.md +10 -0
  31. package/changelog/2.2.x/2.2.2.md +20 -0
  32. package/changelog/2.2.x/2.2.3.md +17 -0
  33. package/changelog/2.2.x/2.2.4.md +34 -0
  34. package/changelog/2.2.x/2.2.5.md +10 -0
  35. package/changelog/2.2.x/2.2.6.md +17 -0
  36. package/changelog/2.3.x/2.3.0.md +27 -0
  37. package/changelog/2.3.x/2.3.1.md +15 -0
  38. package/changelog/2.3.x/2.3.10.md +20 -0
  39. package/changelog/2.3.x/2.3.11.md +21 -0
  40. package/changelog/2.3.x/2.3.2.md +27 -0
  41. package/changelog/2.3.x/2.3.3.md +38 -0
  42. package/changelog/2.3.x/2.3.4.md +21 -0
  43. package/changelog/2.3.x/2.3.5.md +24 -0
  44. package/changelog/2.3.x/2.3.6.md +26 -0
  45. package/changelog/2.3.x/2.3.7.md +31 -0
  46. package/changelog/2.3.x/2.3.8.md +19 -0
  47. package/changelog/2.3.x/2.3.9.md +22 -0
  48. package/changelog/2.4.x/2.4.0.md +34 -0
  49. package/changelog/2.4.x/2.4.1.md +32 -0
  50. package/changelog/2.5.x/2.5.0.md +35 -0
  51. package/changelog/2.5.x/2.5.1.md +32 -0
  52. package/changelog/2.5.x/2.5.2.md +23 -0
  53. package/changelog/2.5.x/2.5.3.md +22 -0
  54. package/changelog/2.5.x/2.5.5.md +52 -0
  55. package/changelog/2.5.x/2.5.6.md +33 -0
  56. package/changelog/2.6.x/2.6.0.md +32 -0
  57. package/changelog/2.6.x/2.6.1.md +26 -0
  58. package/changelog/2.6.x/2.6.10.md +16 -0
  59. package/changelog/2.6.x/2.6.11.md +24 -0
  60. package/changelog/2.6.x/2.6.12.md +29 -0
  61. package/changelog/2.6.x/2.6.2.md +23 -0
  62. package/changelog/2.6.x/2.6.3.md +17 -0
  63. package/changelog/2.6.x/2.6.4.md +21 -0
  64. package/changelog/2.6.x/2.6.5.md +30 -0
  65. package/changelog/2.6.x/2.6.6.md +25 -0
  66. package/changelog/2.6.x/2.6.7.md +37 -0
  67. package/changelog/2.6.x/2.6.8.md +15 -0
  68. package/changelog/2.6.x/2.6.9.md +36 -0
  69. package/changelog/2.7.x/2.7.0.md +41 -0
  70. package/changelog/2.7.x/2.7.1.md +21 -0
  71. package/changelog/2.7.x/2.7.10.md +13 -0
  72. package/changelog/2.7.x/2.7.11.md +15 -0
  73. package/changelog/2.7.x/2.7.2.md +22 -0
  74. package/changelog/2.7.x/2.7.3.md +18 -0
  75. package/changelog/2.7.x/2.7.4.md +15 -0
  76. package/changelog/2.7.x/2.7.5.md +34 -0
  77. package/changelog/2.7.x/2.7.6.md +14 -0
  78. package/changelog/2.7.x/2.7.7.md +14 -0
  79. package/changelog/2.7.x/2.7.8.md +18 -0
  80. package/changelog/2.7.x/2.7.9.md +16 -0
  81. package/changelog/2.8.x/2.8.0.md +23 -0
  82. package/changelog/2.9.x/2.9.0.md +21 -0
  83. package/changelog/2.9.x/2.9.1.md +12 -0
  84. package/changelog/2.9.x/2.9.10.md +15 -0
  85. package/changelog/2.9.x/2.9.2.md +21 -0
  86. package/changelog/2.9.x/2.9.3.md +11 -0
  87. package/changelog/2.9.x/2.9.4.md +24 -0
  88. package/changelog/2.9.x/2.9.5.md +20 -0
  89. package/changelog/2.9.x/2.9.6.md +22 -0
  90. package/changelog/2.9.x/2.9.7.md +26 -0
  91. package/changelog/2.9.x/2.9.8.md +15 -0
  92. package/changelog/2.9.x/2.9.9.md +35 -0
  93. package/changelog/template.md +151 -0
  94. package/dist/index.js +1 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts +7 -2
  97. package/dist/mcp-server/tools/definitions/convert-ids.tool.d.ts.map +1 -1
  98. package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts +7 -2
  99. package/dist/mcp-server/tools/definitions/fetch-articles.tool.d.ts.map +1 -1
  100. package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts +14 -5
  101. package/dist/mcp-server/tools/definitions/fetch-fulltext.tool.d.ts.map +1 -1
  102. package/dist/mcp-server/tools/definitions/find-related.tool.d.ts +0 -60
  103. package/dist/mcp-server/tools/definitions/find-related.tool.d.ts.map +1 -1
  104. package/dist/mcp-server/tools/definitions/find-related.tool.js +4 -4
  105. package/dist/mcp-server/tools/definitions/find-related.tool.js.map +1 -1
  106. package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts +7 -2
  107. package/dist/mcp-server/tools/definitions/format-citations.tool.d.ts.map +1 -1
  108. package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts +7 -2
  109. package/dist/mcp-server/tools/definitions/lookup-citation.tool.d.ts.map +1 -1
  110. package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts +7 -2
  111. package/dist/mcp-server/tools/definitions/lookup-mesh.tool.d.ts.map +1 -1
  112. package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.d.ts +6 -3
  113. package/dist/mcp-server/tools/definitions/pubmed-europepmc-fetch.tool.d.ts.map +1 -1
  114. package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.d.ts +6 -3
  115. package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.d.ts.map +1 -1
  116. package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.js +1 -1
  117. package/dist/mcp-server/tools/definitions/pubmed-europepmc-search.tool.js.map +1 -1
  118. package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts +7 -2
  119. package/dist/mcp-server/tools/definitions/search-articles.tool.d.ts.map +1 -1
  120. package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts +7 -2
  121. package/dist/mcp-server/tools/definitions/spell-check.tool.d.ts.map +1 -1
  122. package/dist/services/error-contracts.d.ts +30 -13
  123. package/dist/services/error-contracts.d.ts.map +1 -1
  124. package/dist/services/error-contracts.js +30 -13
  125. package/dist/services/error-contracts.js.map +1 -1
  126. package/dist/services/europe-pmc/api-client.d.ts +14 -2
  127. package/dist/services/europe-pmc/api-client.d.ts.map +1 -1
  128. package/dist/services/europe-pmc/api-client.js +30 -4
  129. package/dist/services/europe-pmc/api-client.js.map +1 -1
  130. package/dist/services/europe-pmc/europe-pmc-service.d.ts +20 -1
  131. package/dist/services/europe-pmc/europe-pmc-service.d.ts.map +1 -1
  132. package/dist/services/europe-pmc/europe-pmc-service.js +98 -50
  133. package/dist/services/europe-pmc/europe-pmc-service.js.map +1 -1
  134. package/dist/services/ncbi/ncbi-service.d.ts +18 -26
  135. package/dist/services/ncbi/ncbi-service.d.ts.map +1 -1
  136. package/dist/services/ncbi/ncbi-service.js +111 -127
  137. package/dist/services/ncbi/ncbi-service.js.map +1 -1
  138. package/dist/services/ncbi/request-queue.d.ts +22 -30
  139. package/dist/services/ncbi/request-queue.d.ts.map +1 -1
  140. package/dist/services/ncbi/request-queue.js +29 -128
  141. package/dist/services/ncbi/request-queue.js.map +1 -1
  142. package/dist/services/ncbi/response-handler.d.ts +14 -1
  143. package/dist/services/ncbi/response-handler.d.ts.map +1 -1
  144. package/dist/services/ncbi/response-handler.js +65 -9
  145. package/dist/services/ncbi/response-handler.js.map +1 -1
  146. package/dist/services/openalex/openalex-service.d.ts.map +1 -1
  147. package/dist/services/openalex/openalex-service.js +3 -10
  148. package/dist/services/openalex/openalex-service.js.map +1 -1
  149. package/package.json +20 -11
  150. package/server.json +3 -3
  151. package/dist/services/retry-policy.d.ts +0 -18
  152. package/dist/services/retry-policy.d.ts.map +0 -1
  153. package/dist/services/retry-policy.js +0 -21
  154. package/dist/services/retry-policy.js.map +0 -1
@@ -7,29 +7,26 @@
7
7
  * from the same `ORDERED_XML_PARSER_OPTIONS` NCBI's ordered parser uses, so
8
8
  * `parsePmcArticle` consumes the result without modification.
9
9
  *
10
+ * A search's retry boundary covers fetch and response classification, so
11
+ * Europe PMC's intermittent empty `{ version }` envelope is retried like an
12
+ * HTTP outage; only a sort or cursor that explains it is reported as bad input.
13
+ *
10
14
  * Optional service: only constructed when `EUROPEPMC_ENABLED=true` (the
11
15
  * default). `getEuropePmcService()` returns `undefined` when disabled so
12
16
  * callers can skip the chain step gracefully.
13
17
  *
14
18
  * @module src/services/europe-pmc/europe-pmc-service
15
19
  */
16
- import { internalError, JsonRpcErrorCode, McpError, serializationError, validationError, } from '@cyanheads/mcp-ts-core/errors';
17
- import { logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
20
+ import { internalError, JsonRpcErrorCode, McpError, serializationError, serviceUnavailable, validationError, } from '@cyanheads/mcp-ts-core/errors';
21
+ import { defaultIsTransient, logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
18
22
  // biome-ignore lint/suspicious/noDeprecatedImports: staying on in-tree XMLValidator — see ncbi/response-handler.ts
19
23
  import { XMLParser, XMLValidator } from 'fast-xml-parser';
20
24
  import { getServerConfig } from '../../config/server-config.js';
21
25
  import { recoveryFor } from '../error-contracts.js';
22
26
  import { ORDERED_XML_PARSER_OPTIONS } from '../ncbi/parsing/ordered-xml-parser-options.js';
23
27
  import { ensureArray } from '../ncbi/parsing/xml-helpers.js';
24
- import { isTransient } from '../retry-policy.js';
25
28
  import { EuropePmcApiClient } from './api-client.js';
26
29
  import { EuropePmcRequestQueue } from './request-queue.js';
27
- /** Retryable transient codes — same set NCBI uses. */
28
- const RETRYABLE_CODES = new Set([
29
- JsonRpcErrorCode.ServiceUnavailable,
30
- JsonRpcErrorCode.Timeout,
31
- JsonRpcErrorCode.RateLimited,
32
- ]);
33
30
  const MAX_BACKOFF_MS = 30_000;
34
31
  function abortableSleep(ms, signal) {
35
32
  if (!signal)
@@ -70,6 +67,28 @@ function recordLookupQuery({ epmcId, source }) {
70
67
  const extIdClause = `(EXT_ID:${epmcId} AND SRC:${source})`;
71
68
  return source === 'PMC' ? `${extIdClause} OR (PMCID:${epmcId})` : extIdClause;
72
69
  }
70
+ /** The sort fields Europe PMC documents. */
71
+ const DOCUMENTED_SORT_FIELDS = new Set(['P_PDATE_D', 'CITED', 'AUTH_FIRST', 'PUB_YEAR']);
72
+ /**
73
+ * Whether a sort is the likely cause of an empty `{ version }` envelope: one of
74
+ * its comma-separated keys has a field outside the documented set, or lacks an
75
+ * `asc`/`desc` direction. Europe PMC answers those shapes with the envelope on
76
+ * every request, and orders by every key of a valid list (`PUB_YEAR desc, CITED
77
+ * desc`). Field and direction compare case-insensitively and tolerate extra
78
+ * whitespace, matching Europe PMC's own parsing.
79
+ *
80
+ * Classification only, never a local allowlist: the request always goes out.
81
+ * Europe PMC honors some undocumented fields (`ID asc` reorders results) and
82
+ * silently ignores others (`SCORE desc`), so only the envelope itself decides.
83
+ */
84
+ function sortExplainsEnvelope(sort) {
85
+ return sort.split(',').some((key) => {
86
+ const [field = '', direction = '', ...rest] = key.trim().split(/\s+/);
87
+ return (rest.length > 0 ||
88
+ !DOCUMENTED_SORT_FIELDS.has(field.toUpperCase()) ||
89
+ !/^(asc|desc)$/i.test(direction));
90
+ });
91
+ }
73
92
  /**
74
93
  * Facade over the Europe PMC REST API:
75
94
  * - `search()` — keyword search across MED/PMC/PPR/PAT/AGR.
@@ -99,9 +118,21 @@ export class EuropePmcService {
99
118
  /**
100
119
  * Search Europe PMC. Cursor-based pagination — pass `cursorMark: '*'` (or
101
120
  * omit) for the first page; pass the returned `nextCursorMark` for the next.
121
+ *
122
+ * The retry boundary covers the fetch and the response classification
123
+ * together, so an empty envelope retries like any other transient failure
124
+ * rather than surfacing after the loop has already returned. (#159)
102
125
  */
103
- async search(params) {
104
- const text = await this.queue.enqueue(() => this.withRetry(() => this.client.search(params), 'search', params.signal), 'search', params.signal);
126
+ search(params) {
127
+ return this.queue.enqueue(() => this.withRetry((attempt) => this.searchOnce(params, attempt === this.maxRetries), 'search', params.signal), 'search', params.signal);
128
+ }
129
+ /**
130
+ * One search attempt: fetch, parse, and classify the body. `isLastAttempt`
131
+ * lets an empty envelope that has persisted through the whole retry budget
132
+ * be attributed to a caller-supplied cursor.
133
+ */
134
+ async searchOnce(params, isLastAttempt) {
135
+ const text = await this.client.search(params);
105
136
  let parsed;
106
137
  try {
107
138
  parsed = JSON.parse(text);
@@ -128,37 +159,51 @@ export class EuropePmcService {
128
159
  });
129
160
  }
130
161
  /**
131
- * EPMC silently returns a `{ version }`-only envelope (no `hitCount`, no
132
- * `request` echo, no `resultList`) when it rejects a parameter — most
133
- * commonly an undocumented `sort` field. Without this guard the response
134
- * normalizes to a fake 0-hit success and the caller never learns the sort
135
- * was rejected. Route to ValidationError (non-retryable) since retrying
136
- * the same input will be rejected again.
162
+ * EPMC answers some requests with a `{ version }`-only envelope — no
163
+ * `hitCount`, no `request` echo, no `resultList`. Without this guard the
164
+ * response normalizes to a fake 0-hit success. Every cause produces the
165
+ * byte-identical body, so it is classified by its likely cause:
166
+ *
167
+ * - A sort that EPMC rejects every time (see `sortExplainsEnvelope`) fails
168
+ * fast as non-retryable input — retrying only adds backoff.
169
+ * - A non-default cursor that draws it on every attempt is most likely
170
+ * invalid or expired; EPMC rejects a malformed cursor every time.
171
+ * - Otherwise it is intermittent upstream noise — valid requests, with or
172
+ * without a documented sort, draw it on a fraction of calls and succeed
173
+ * when repeated — so it is thrown as a transient `europepmc_unreachable`
174
+ * for the retry loop, and never names the caller's input. (#159)
175
+ *
176
+ * Each throw keeps the diagnosis (message) apart from the next step
177
+ * (recovery hint): the framework mirrors `data.recovery.hint` into
178
+ * `content[]`, and one string passed as both renders byte-identical
179
+ * Error:/Recovery: blocks. (#75)
137
180
  */
138
181
  if (parsed.hitCount === undefined &&
139
182
  parsed.request === undefined &&
140
183
  parsed.resultList === undefined) {
141
- // Split the diagnosis (message) from the actionable next step (recovery
142
- // hint). The framework mirrors data.recovery.hint into content[], so
143
- // passing one string as both renders byte-identical Error:/Recovery:
144
- // blocks — the same distinct message-vs-hint shape as the errMsg throw
145
- // ~20 lines up. (#75)
146
- const { message, hint } = params.sort
147
- ? {
148
- message: `Europe PMC silently rejected the request — most likely the invalid sort field "${params.sort}".`,
149
- hint: 'Use a documented sort (`P_PDATE_D desc`, `CITED desc`, `AUTH_FIRST asc`, or `PUB_YEAR desc`), or omit `sort` for relevance ranking.',
150
- }
151
- : {
152
- message: 'Europe PMC silently rejected the request — empty envelope with no hitCount.',
153
- hint: 'Verify the query syntax, sort field, and cursorMark, then retry.',
154
- };
155
- throw validationError(message, {
156
- reason: 'europepmc_invalid_input',
157
- ...(params.sort && { sort: params.sort }),
158
- ...(params.cursorMark && params.cursorMark !== '*' && { cursorMark: params.cursorMark }),
159
- responseSnippet: text.substring(0, 200),
160
- recovery: { hint },
161
- });
184
+ const cursorMark = params.cursorMark && params.cursorMark !== '*' ? params.cursorMark : undefined;
185
+ if (params.sort && sortExplainsEnvelope(params.sort)) {
186
+ throw validationError(`Europe PMC silently rejected the request — most likely the sort "${params.sort}", which needs a documented field and an asc/desc direction.`, {
187
+ reason: 'europepmc_invalid_input',
188
+ sort: params.sort,
189
+ ...(cursorMark && { cursorMark }),
190
+ responseSnippet: text.substring(0, 200),
191
+ recovery: {
192
+ hint: 'Use a documented sort (`P_PDATE_D desc`, `CITED desc`, `AUTH_FIRST asc`, or `PUB_YEAR desc`), or omit `sort` for relevance ranking.',
193
+ },
194
+ });
195
+ }
196
+ if (cursorMark && isLastAttempt) {
197
+ throw validationError(`Europe PMC answered every attempt for cursorMark "${cursorMark}" with an empty response — the cursor is most likely invalid or expired.`, {
198
+ reason: 'europepmc_invalid_input',
199
+ cursorMark,
200
+ responseSnippet: text.substring(0, 200),
201
+ recovery: {
202
+ hint: 'Restart from the first page with `cursorMark: "*"`, or pass the exact `nextCursorMark` from the previous response.',
203
+ },
204
+ });
205
+ }
206
+ throw serviceUnavailable('Europe PMC returned an empty response with no hit count or result list.', { reason: 'europepmc_unreachable', ...recoveryFor('europepmc_unreachable') });
162
207
  }
163
208
  const hits = ensureArray(parsed.resultList?.result);
164
209
  const echoed = parsed.request?.queryString ?? params.query;
@@ -338,21 +383,26 @@ export class EuropePmcService {
338
383
  /**
339
384
  * Retry wrapper for transient errors. Mirrors NCBI's `withRetry` minus the
340
385
  * service-level deadline — EPMC requests are cheaper individually and the
341
- * caller (typically `ctx.signal`) bounds the total chain.
386
+ * caller (typically `ctx.signal`) bounds the total chain. `execute` receives
387
+ * the zero-based attempt index. On exhaustion the last error keeps its code
388
+ * and an upstream `retryAfter`, so a 429 still tells the caller how long to
389
+ * wait. Only a `ServiceUnavailable` gains `europepmc_unreachable` and its hint;
390
+ * a `Timeout` or `RateLimited` keeps its code with no reason, as the NCBI
391
+ * service reports them.
342
392
  */
343
393
  async withRetry(execute, label, signal) {
344
394
  for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
345
395
  if (signal?.aborted)
346
396
  throw signal.reason;
347
397
  try {
348
- return await execute();
398
+ return await execute(attempt);
349
399
  }
350
400
  catch (error) {
351
401
  if (signal?.aborted)
352
402
  throw signal.reason;
353
403
  if (!(error instanceof McpError))
354
404
  throw error;
355
- if (!isTransient(error, RETRYABLE_CODES))
405
+ if (!defaultIsTransient(error))
356
406
  throw error;
357
407
  if (attempt < this.maxRetries) {
358
408
  const baseDelay = Math.min(1000 * 2 ** attempt, MAX_BACKOFF_MS);
@@ -366,20 +416,18 @@ export class EuropePmcService {
366
416
  continue;
367
417
  }
368
418
  const attempts = this.maxRetries + 1;
369
- const msg = error instanceof Error ? error.message : String(error);
370
- throw new McpError(error.code, `${msg} (failed after ${attempts} attempts)`, {
371
- reason: 'europepmc_unreachable',
419
+ throw new McpError(error.code, `${error.message} (failed after ${attempts} attempts)`, {
420
+ ...(error.code === JsonRpcErrorCode.ServiceUnavailable && {
421
+ reason: 'europepmc_unreachable',
422
+ ...recoveryFor('europepmc_unreachable'),
423
+ }),
372
424
  label,
373
425
  attempts,
374
- ...recoveryFor('europepmc_unreachable'),
426
+ ...(error.data?.retryAfter !== undefined && { retryAfter: error.data.retryAfter }),
375
427
  }, { cause: error });
376
428
  }
377
429
  }
378
- throw internalError('Europe PMC request failed after all retries.', {
379
- reason: 'europepmc_unreachable',
380
- label,
381
- ...recoveryFor('europepmc_unreachable'),
382
- });
430
+ throw internalError('Europe PMC request failed after all retries.', { label });
383
431
  }
384
432
  }
385
433
  // ─── Init / Accessor ────────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"europe-pmc-service.js","sourceRoot":"","sources":["../../../src/services/europe-pmc/europe-pmc-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"europe-pmc-service.js","sourceRoot":"","sources":["../../../src/services/europe-pmc/europe-pmc-service.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * @fileoverview High-level service for interacting with NCBI E-utilities.
3
3
  * Orchestrates the API client, request queue, and response handler to provide
4
- * typed methods for each E-utility endpoint. Uses init/accessor pattern.
4
+ * typed methods for each E-utility endpoint. Every call runs as a retry loop around
5
+ * the shared request queue — each attempt re-queued and re-paced — under one total
6
+ * deadline that covers queue wait, attempts, and backoff. Uses init/accessor pattern.
5
7
  * @module src/services/ncbi/ncbi-service
6
8
  */
9
+ import { type Pacer } from '@cyanheads/mcp-ts-core/utils';
7
10
  import { NcbiApiClient } from './api-client.js';
8
- import { NcbiRequestQueue } from './request-queue.js';
9
11
  import { NcbiResponseHandler } from './response-handler.js';
10
12
  import { type ECitMatchCitation, type ECitMatchResult, type ESearchResult, type ESpellResult, type ESummaryResult, type IdConvertRecord, type NcbiCallOptions, type NcbiRequestOptions, type NcbiRequestParams, type XmlPubmedArticleSet } from './types.js';
11
13
  /**
@@ -18,7 +20,7 @@ export declare class NcbiService {
18
20
  private readonly responseHandler;
19
21
  private readonly maxRetries;
20
22
  private readonly totalDeadlineMs;
21
- constructor(apiClient: NcbiApiClient, queue: NcbiRequestQueue, responseHandler: NcbiResponseHandler, maxRetries: number, totalDeadlineMs: number);
23
+ constructor(apiClient: NcbiApiClient, queue: Pacer, responseHandler: NcbiResponseHandler, maxRetries: number, totalDeadlineMs: number);
22
24
  eSearch(params: NcbiRequestParams, options?: NcbiCallOptions): Promise<ESearchResult>;
23
25
  eSummary(params: NcbiRequestParams, options?: NcbiCallOptions): Promise<ESummaryResult>;
24
26
  eFetch<T = {
@@ -43,32 +45,22 @@ export declare class NcbiService {
43
45
  * Accepts up to 200 IDs in a single request. Only works for articles in PMC.
44
46
  */
45
47
  idConvert(ids: string[], idtype?: string, options?: NcbiCallOptions): Promise<IdConvertRecord[]>;
46
- /** Error codes that are transient and worth retrying with backoff. */
47
- private static readonly RETRYABLE_CODES;
48
- /** Maximum backoff delay per retry (prevents exponential explosion at high retry counts). */
49
- private static readonly MAX_BACKOFF_MS;
50
48
  /**
51
- * Wraps a task with a service-level deadline. Returns a combined AbortSignal
52
- * (internal deadline OR'd with the caller's `ctx.signal`, if any) that the
53
- * task must forward to both the HTTP call and any backoff sleep so cancellation
54
- * interrupts the full retry chain — not just the next attempt.
55
- */
56
- private runWithDeadline;
57
- /**
58
- * Retry wrapper for transient NCBI errors (ServiceUnavailable, Timeout, RateLimited).
59
- * Non-transient McpErrors and unexpected plain Errors fail immediately.
60
- * Uses capped exponential backoff with jitter. Backoff sleep is abortable via
61
- * `signal`, so deadline expiration or caller cancel short-circuits the chain.
49
+ * Runs one NCBI call: a retry loop around the shared request queue, so every
50
+ * attempt re-queues and is re-paced (and a 429 closes the gate for all callers,
51
+ * not just this one). One deadline covers queue wait, attempts, and backoff. Its
52
+ * signal — joined with the caller's — reaches the queue wait, the backoff sleep,
53
+ * and the HTTP request, and each attempt offers the queue only the time left, so
54
+ * a call that cannot start in time is shed at once instead of waiting it out.
55
+ *
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.
62
58
  */
63
- private withRetry;
59
+ private runPaced;
64
60
  /**
65
- * Runs a request under a service-level deadline that bounds queue wait time
66
- * + retry chain + HTTP execution. The deadline is constructed *outside* the
67
- * queue so a backlog can't burn a request's budget before it even dispatches.
68
- *
69
- * The combined deadline+caller signal is threaded into the queue (cancels a
70
- * still-waiting task), the retry chain (cancels pending backoff sleeps),
71
- * and the HTTP fetch (cancels wedged requests).
61
+ * One eutils request through {@link runPaced}: fetch, classify, parse. EFetch's
62
+ * all-invalid-ID rejection resolves as the empty set NCBI returns for an unknown
63
+ * ID, and a backend-failure envelope is reclassified as transient so it retries.
72
64
  */
73
65
  private performRequest;
74
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ncbi-service.d.ts","sourceRoot":"","sources":["../../../src/services/ncbi/ncbi-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAA2B,MAAM,uBAAuB,CAAC;AACrF,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;AAgFpB;;;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,gBAAgB,EACvB,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,CA+E5B;IAED,sEAAsE;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAIpC;IAEH,6FAA6F;IAC7F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAU;IAEhD;;;;;OAKG;YACW,eAAe;IAkC7B;;;;;OAKG;YACW,SAAS;IAkEvB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;CA4BvB;AAMD,qEAAqE;AACrE,wBAAgB,eAAe,IAAI,IAAI,CA8BtC;AAED,mEAAmE;AACnE,wBAAgB,cAAc,IAAI,WAAW,CAG5C"}
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;AAItC,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;AA+HpB;;;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,CAmE5B;IAED;;;;;;;;;;OAUG;YACW,QAAQ;IA4CtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAgBvB;AAMD,qEAAqE;AACrE,wBAAgB,eAAe,IAAI,IAAI,CAiCtC;AAED,mEAAmE;AACnE,wBAAgB,cAAc,IAAI,WAAW,CAG5C"}