paper-search-cli 0.1.0

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 (166) hide show
  1. package/.env.example +165 -0
  2. package/LICENSE +21 -0
  3. package/README-sc.md +642 -0
  4. package/README.md +642 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +637 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/config/ConfigService.d.ts +26 -0
  10. package/dist/config/ConfigService.d.ts.map +1 -0
  11. package/dist/config/ConfigService.js +145 -0
  12. package/dist/config/ConfigService.js.map +1 -0
  13. package/dist/config/constants.d.ts +140 -0
  14. package/dist/config/constants.d.ts.map +1 -0
  15. package/dist/config/constants.js +93 -0
  16. package/dist/config/constants.js.map +1 -0
  17. package/dist/core/diagnostics.d.ts +43 -0
  18. package/dist/core/diagnostics.d.ts.map +1 -0
  19. package/dist/core/diagnostics.js +544 -0
  20. package/dist/core/diagnostics.js.map +1 -0
  21. package/dist/core/handleToolCall.d.ts +8 -0
  22. package/dist/core/handleToolCall.d.ts.map +1 -0
  23. package/dist/core/handleToolCall.js +440 -0
  24. package/dist/core/handleToolCall.js.map +1 -0
  25. package/dist/core/schemas.d.ts +454 -0
  26. package/dist/core/schemas.d.ts.map +1 -0
  27. package/dist/core/schemas.js +322 -0
  28. package/dist/core/schemas.js.map +1 -0
  29. package/dist/core/searchers.d.ts +45 -0
  30. package/dist/core/searchers.d.ts.map +1 -0
  31. package/dist/core/searchers.js +73 -0
  32. package/dist/core/searchers.js.map +1 -0
  33. package/dist/core/tools.d.ts +7 -0
  34. package/dist/core/tools.d.ts.map +1 -0
  35. package/dist/core/tools.js +640 -0
  36. package/dist/core/tools.js.map +1 -0
  37. package/dist/models/Paper.d.ts +64 -0
  38. package/dist/models/Paper.d.ts.map +1 -0
  39. package/dist/models/Paper.js +70 -0
  40. package/dist/models/Paper.js.map +1 -0
  41. package/dist/platforms/ArxivSearcher.d.ts +64 -0
  42. package/dist/platforms/ArxivSearcher.d.ts.map +1 -0
  43. package/dist/platforms/ArxivSearcher.js +531 -0
  44. package/dist/platforms/ArxivSearcher.js.map +1 -0
  45. package/dist/platforms/BioRxivSearcher.d.ts +47 -0
  46. package/dist/platforms/BioRxivSearcher.d.ts.map +1 -0
  47. package/dist/platforms/BioRxivSearcher.js +196 -0
  48. package/dist/platforms/BioRxivSearcher.js.map +1 -0
  49. package/dist/platforms/CORESearcher.d.ts +16 -0
  50. package/dist/platforms/CORESearcher.d.ts.map +1 -0
  51. package/dist/platforms/CORESearcher.js +148 -0
  52. package/dist/platforms/CORESearcher.js.map +1 -0
  53. package/dist/platforms/CrossrefSearcher.d.ts +34 -0
  54. package/dist/platforms/CrossrefSearcher.d.ts.map +1 -0
  55. package/dist/platforms/CrossrefSearcher.js +339 -0
  56. package/dist/platforms/CrossrefSearcher.js.map +1 -0
  57. package/dist/platforms/EuropePMCSearcher.d.ts +20 -0
  58. package/dist/platforms/EuropePMCSearcher.d.ts.map +1 -0
  59. package/dist/platforms/EuropePMCSearcher.js +173 -0
  60. package/dist/platforms/EuropePMCSearcher.js.map +1 -0
  61. package/dist/platforms/GoogleScholarSearcher.d.ts +77 -0
  62. package/dist/platforms/GoogleScholarSearcher.d.ts.map +1 -0
  63. package/dist/platforms/GoogleScholarSearcher.js +262 -0
  64. package/dist/platforms/GoogleScholarSearcher.js.map +1 -0
  65. package/dist/platforms/IACRSearcher.d.ts +51 -0
  66. package/dist/platforms/IACRSearcher.d.ts.map +1 -0
  67. package/dist/platforms/IACRSearcher.js +339 -0
  68. package/dist/platforms/IACRSearcher.js.map +1 -0
  69. package/dist/platforms/OpenAIRESearcher.d.ts +22 -0
  70. package/dist/platforms/OpenAIRESearcher.d.ts.map +1 -0
  71. package/dist/platforms/OpenAIRESearcher.js +223 -0
  72. package/dist/platforms/OpenAIRESearcher.js.map +1 -0
  73. package/dist/platforms/OpenAlexSearcher.d.ts +14 -0
  74. package/dist/platforms/OpenAlexSearcher.d.ts.map +1 -0
  75. package/dist/platforms/OpenAlexSearcher.js +114 -0
  76. package/dist/platforms/OpenAlexSearcher.js.map +1 -0
  77. package/dist/platforms/PMCSearcher.d.ts +20 -0
  78. package/dist/platforms/PMCSearcher.d.ts.map +1 -0
  79. package/dist/platforms/PMCSearcher.js +177 -0
  80. package/dist/platforms/PMCSearcher.js.map +1 -0
  81. package/dist/platforms/PaperSource.d.ts +143 -0
  82. package/dist/platforms/PaperSource.d.ts.map +1 -0
  83. package/dist/platforms/PaperSource.js +125 -0
  84. package/dist/platforms/PaperSource.js.map +1 -0
  85. package/dist/platforms/PubMedSearcher.d.ts +104 -0
  86. package/dist/platforms/PubMedSearcher.d.ts.map +1 -0
  87. package/dist/platforms/PubMedSearcher.js +422 -0
  88. package/dist/platforms/PubMedSearcher.js.map +1 -0
  89. package/dist/platforms/SciHubSearcher.d.ts +66 -0
  90. package/dist/platforms/SciHubSearcher.d.ts.map +1 -0
  91. package/dist/platforms/SciHubSearcher.js +398 -0
  92. package/dist/platforms/SciHubSearcher.js.map +1 -0
  93. package/dist/platforms/ScienceDirectSearcher.d.ts +42 -0
  94. package/dist/platforms/ScienceDirectSearcher.d.ts.map +1 -0
  95. package/dist/platforms/ScienceDirectSearcher.js +326 -0
  96. package/dist/platforms/ScienceDirectSearcher.js.map +1 -0
  97. package/dist/platforms/ScopusSearcher.d.ts +43 -0
  98. package/dist/platforms/ScopusSearcher.d.ts.map +1 -0
  99. package/dist/platforms/ScopusSearcher.js +364 -0
  100. package/dist/platforms/ScopusSearcher.js.map +1 -0
  101. package/dist/platforms/SemanticScholarSearcher.d.ts +96 -0
  102. package/dist/platforms/SemanticScholarSearcher.d.ts.map +1 -0
  103. package/dist/platforms/SemanticScholarSearcher.js +419 -0
  104. package/dist/platforms/SemanticScholarSearcher.js.map +1 -0
  105. package/dist/platforms/SpringerSearcher.d.ts +54 -0
  106. package/dist/platforms/SpringerSearcher.d.ts.map +1 -0
  107. package/dist/platforms/SpringerSearcher.js +407 -0
  108. package/dist/platforms/SpringerSearcher.js.map +1 -0
  109. package/dist/platforms/UnpaywallSearcher.d.ts +18 -0
  110. package/dist/platforms/UnpaywallSearcher.d.ts.map +1 -0
  111. package/dist/platforms/UnpaywallSearcher.js +115 -0
  112. package/dist/platforms/UnpaywallSearcher.js.map +1 -0
  113. package/dist/platforms/WebOfScienceSearcher.d.ts +111 -0
  114. package/dist/platforms/WebOfScienceSearcher.d.ts.map +1 -0
  115. package/dist/platforms/WebOfScienceSearcher.js +500 -0
  116. package/dist/platforms/WebOfScienceSearcher.js.map +1 -0
  117. package/dist/platforms/WileySearcher.d.ts +44 -0
  118. package/dist/platforms/WileySearcher.d.ts.map +1 -0
  119. package/dist/platforms/WileySearcher.js +148 -0
  120. package/dist/platforms/WileySearcher.js.map +1 -0
  121. package/dist/services/CitationService.d.ts +66 -0
  122. package/dist/services/CitationService.d.ts.map +1 -0
  123. package/dist/services/CitationService.js +237 -0
  124. package/dist/services/CitationService.js.map +1 -0
  125. package/dist/services/MultiSourceSearchService.d.ts +19 -0
  126. package/dist/services/MultiSourceSearchService.d.ts.map +1 -0
  127. package/dist/services/MultiSourceSearchService.js +96 -0
  128. package/dist/services/MultiSourceSearchService.js.map +1 -0
  129. package/dist/services/OpenAccessFallbackService.d.ts +20 -0
  130. package/dist/services/OpenAccessFallbackService.d.ts.map +1 -0
  131. package/dist/services/OpenAccessFallbackService.js +124 -0
  132. package/dist/services/OpenAccessFallbackService.js.map +1 -0
  133. package/dist/utils/ErrorHandler.d.ts +99 -0
  134. package/dist/utils/ErrorHandler.d.ts.map +1 -0
  135. package/dist/utils/ErrorHandler.js +266 -0
  136. package/dist/utils/ErrorHandler.js.map +1 -0
  137. package/dist/utils/Logger.d.ts +6 -0
  138. package/dist/utils/Logger.d.ts.map +1 -0
  139. package/dist/utils/Logger.js +26 -0
  140. package/dist/utils/Logger.js.map +1 -0
  141. package/dist/utils/PDFExtractor.d.ts +34 -0
  142. package/dist/utils/PDFExtractor.d.ts.map +1 -0
  143. package/dist/utils/PDFExtractor.js +130 -0
  144. package/dist/utils/PDFExtractor.js.map +1 -0
  145. package/dist/utils/PdfDownload.d.ts +7 -0
  146. package/dist/utils/PdfDownload.d.ts.map +1 -0
  147. package/dist/utils/PdfDownload.js +52 -0
  148. package/dist/utils/PdfDownload.js.map +1 -0
  149. package/dist/utils/QuotaManager.d.ts +32 -0
  150. package/dist/utils/QuotaManager.d.ts.map +1 -0
  151. package/dist/utils/QuotaManager.js +95 -0
  152. package/dist/utils/QuotaManager.js.map +1 -0
  153. package/dist/utils/RateLimiter.d.ts +50 -0
  154. package/dist/utils/RateLimiter.d.ts.map +1 -0
  155. package/dist/utils/RateLimiter.js +121 -0
  156. package/dist/utils/RateLimiter.js.map +1 -0
  157. package/dist/utils/RequestCache.d.ts +26 -0
  158. package/dist/utils/RequestCache.d.ts.map +1 -0
  159. package/dist/utils/RequestCache.js +66 -0
  160. package/dist/utils/RequestCache.js.map +1 -0
  161. package/dist/utils/SecurityUtils.d.ts +80 -0
  162. package/dist/utils/SecurityUtils.d.ts.map +1 -0
  163. package/dist/utils/SecurityUtils.js +357 -0
  164. package/dist/utils/SecurityUtils.js.map +1 -0
  165. package/package.json +111 -0
  166. package/skills/paper-search/SKILL.md +192 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PMCSearcher.js","sourceRoot":"","sources":["../../src/platforms/PMCSearcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAS,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAwD,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAYxD,MAAM,OAAO,WAAY,SAAQ,WAAW;IACzB,MAAM,CAAgB;IACtB,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACnD,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,8BAA8B,CAAC;IAEjH;QACE,KAAK,CAAC,KAAK,EAAE,+CAA+C,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,UAAU;aACzB;SACF,CAAC,CAAC;IACL,CAAC;IAED,eAAe;QACb,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,UAAyB,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YACzE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC5D,MAAM,EAAE;oBACN,EAAE,EAAE,KAAK;oBACT,IAAI;oBACJ,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;oBAChC,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC,CAAC;YACH,MAAM,GAAG,GAAa,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,IAAI,EAAE,CAAC;YACvE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAEhC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE;gBAC9D,MAAM,EAAE;oBACN,EAAE,EAAE,KAAK;oBACT,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;oBACjB,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;iBAClB;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAY,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,UAA2B,EAAE;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,aAAa,KAAK,iKAAiK,CACpL,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,MAAM,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,IAAI,aAAa,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3G,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,2BAA2B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,UAA2B,EAAE;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,IAAI,IAAI,qBAAqB,OAAO,mCAAmC,CAAC;IACxF,CAAC;IAEO,YAAY,CAAC,IAAiB;QACpC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACvG,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAE1D,OAAO,YAAY,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,eAAe;YACxB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9E,QAAQ,EAAE,EAAE;YACZ,GAAG;YACH,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;YACjE,MAAM,EAAE,6CAA6C,eAAe,OAAO;YAC3E,GAAG,EAAE,6CAA6C,eAAe,GAAG;YACpE,MAAM,EAAE,KAAK;YACb,OAAO;YACP,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,IAAgB,EAAE,MAAc;QACpD,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtG,OAAO,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAAa;QACxC,OAAO;YACL,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YACxC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;SACrC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC;IACrE,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,KAAa;QAC7C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,yDAAyD,EAAE;gBAC1F,MAAM,EAAE;oBACN,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,MAAM;oBACd,UAAU,EAAE,MAAM;oBAClB,QAAQ,EAAE,CAAC;iBACZ;gBACD,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE;oBACP,MAAM,EAAE,kBAAkB;oBAC1B,YAAY,EAAE,UAAU;iBACzB;aACF,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CACzC,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;gBAC1D,KAAK,EAAE,GAAG;gBACV,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC;gBACrC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CACxC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CACzC,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;gBAC1D,KAAK,EAAE,GAAG;gBACV,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CACrC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAElC,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,KAAa;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,mDAAmD,EAAE;gBACpF,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;gBACrB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE;oBACP,MAAM,EAAE,8BAA8B;oBACtC,YAAY,EAAE,UAAU;iBACzB;gBACD,YAAY,EAAE,MAAM;aACrB,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,8EAA8E,CAAC,CAAC,CAAC;YACzH,OAAO,OAAO;iBACX,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,GAAW;QACtC,OAAO,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC;IAC7E,CAAC;CACF"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * 学术论文搜索平台的抽象基类
3
+ * 定义了所有平台搜索器必须实现的核心接口
4
+ */
5
+ import { Paper } from '../models/Paper.js';
6
+ import { ErrorHandler } from '../utils/ErrorHandler.js';
7
+ export interface SearchOptions {
8
+ /** 最大结果数量 */
9
+ maxResults?: number;
10
+ /** 年份过滤 */
11
+ year?: string;
12
+ /** 作者过滤 */
13
+ author?: string;
14
+ /** 期刊过滤 */
15
+ journal?: string;
16
+ /** 学科分类过滤 */
17
+ category?: string;
18
+ /** 排序方式 */
19
+ sortBy?: 'relevance' | 'date' | 'citations';
20
+ /** 排序顺序 */
21
+ sortOrder?: 'asc' | 'desc';
22
+ /** 搜索天数范围 (bioRxiv/medRxiv) */
23
+ days?: number;
24
+ /** 是否获取详细信息 (IACR) */
25
+ fetchDetails?: boolean;
26
+ /** 研究领域过滤 (Semantic Scholar) */
27
+ fieldsOfStudy?: string[];
28
+ /** 开放获取过滤 (Springer/ScienceDirect/Scopus) */
29
+ openAccess?: boolean;
30
+ /** 主题过滤 (Springer/Scopus) */
31
+ subject?: string;
32
+ /** 出版物类型过滤 (Springer) */
33
+ type?: 'Journal' | 'Book' | 'Chapter';
34
+ /** 机构过滤 (Scopus) */
35
+ affiliation?: string;
36
+ /** 文档类型过滤 (Scopus) */
37
+ documentType?: 'ar' | 'cp' | 're' | 'bk' | 'ch';
38
+ /** 出版物类型 (PubMed) */
39
+ publicationType?: string[];
40
+ }
41
+ export interface DownloadOptions {
42
+ /** 保存路径 */
43
+ savePath?: string;
44
+ /** 是否覆盖现有文件 */
45
+ overwrite?: boolean;
46
+ }
47
+ export interface PlatformCapabilities {
48
+ /** 是否支持搜索 */
49
+ search: boolean;
50
+ /** 是否支持PDF下载 */
51
+ download: boolean;
52
+ /** 是否支持全文提取 */
53
+ fullText: boolean;
54
+ /** 是否支持被引统计 */
55
+ citations: boolean;
56
+ /** 是否需要API密钥 */
57
+ requiresApiKey: boolean;
58
+ /** 支持的搜索选项 */
59
+ supportedOptions: (keyof SearchOptions)[];
60
+ }
61
+ /**
62
+ * 抽象基类:论文搜索平台
63
+ */
64
+ export declare abstract class PaperSource {
65
+ protected readonly baseUrl: string;
66
+ protected readonly apiKey?: string;
67
+ protected readonly platformName: string;
68
+ protected readonly errorHandler: ErrorHandler;
69
+ constructor(platformName: string, baseUrl: string, apiKey?: string);
70
+ /**
71
+ * 获取平台能力描述
72
+ */
73
+ abstract getCapabilities(): PlatformCapabilities;
74
+ /**
75
+ * 搜索论文
76
+ * @param query 搜索查询字符串
77
+ * @param options 搜索选项
78
+ * @returns Promise<Paper[]> 论文列表
79
+ */
80
+ abstract search(query: string, options?: SearchOptions): Promise<Paper[]>;
81
+ /**
82
+ * 下载PDF文件
83
+ * @param paperId 论文ID
84
+ * @param options 下载选项
85
+ * @returns Promise<string> 下载文件的路径
86
+ */
87
+ abstract downloadPdf(paperId: string, options?: DownloadOptions): Promise<string>;
88
+ /**
89
+ * 读取论文全文内容
90
+ * @param paperId 论文ID
91
+ * @param options 下载选项(如果需要先下载)
92
+ * @returns Promise<string> 论文全文内容
93
+ */
94
+ abstract readPaper(paperId: string, options?: DownloadOptions): Promise<string>;
95
+ /**
96
+ * 根据DOI获取论文信息
97
+ * @param doi DOI标识符
98
+ * @returns Promise<Paper | null> 论文信息或null
99
+ */
100
+ getPaperByDoi(doi: string): Promise<Paper | null>;
101
+ /**
102
+ * 验证API密钥是否有效
103
+ * @returns Promise<boolean> 是否有效
104
+ */
105
+ validateApiKey(): Promise<boolean>;
106
+ /**
107
+ * 获取平台名称
108
+ */
109
+ getPlatformName(): string;
110
+ /**
111
+ * 获取基础URL
112
+ */
113
+ getBaseUrl(): string;
114
+ /**
115
+ * 是否配置了API密钥
116
+ */
117
+ hasApiKey(): boolean;
118
+ /**
119
+ * 通用的HTTP请求错误处理 - 使用统一ErrorHandler
120
+ */
121
+ protected handleHttpError(error: any, operation: string): never;
122
+ /**
123
+ * 检查错误是否可重试
124
+ */
125
+ protected isRetryableError(error: any): boolean;
126
+ /**
127
+ * 获取建议的重试延迟
128
+ */
129
+ protected getRetryDelay(error: any, attempt?: number): number;
130
+ /**
131
+ * 通用的日期解析
132
+ */
133
+ protected parseDate(dateString: string): Date | null;
134
+ /**
135
+ * 清理和规范化文本
136
+ */
137
+ protected cleanText(text: string): string;
138
+ /**
139
+ * 从URL中提取文件名
140
+ */
141
+ protected extractFilename(url: string, paperId: string, extension?: string): string;
142
+ }
143
+ //# sourceMappingURL=PaperSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaperSource.d.ts","sourceRoot":"","sources":["../../src/platforms/PaperSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * 学术论文搜索平台的抽象基类
3
+ * 定义了所有平台搜索器必须实现的核心接口
4
+ */
5
+ import { ErrorHandler } from '../utils/ErrorHandler.js';
6
+ import { logDebug } from '../utils/Logger.js';
7
+ /**
8
+ * 抽象基类:论文搜索平台
9
+ */
10
+ export class PaperSource {
11
+ baseUrl;
12
+ apiKey;
13
+ platformName;
14
+ errorHandler;
15
+ constructor(platformName, baseUrl, apiKey) {
16
+ this.platformName = platformName;
17
+ this.baseUrl = baseUrl;
18
+ this.apiKey = apiKey;
19
+ this.errorHandler = new ErrorHandler(platformName, process.env.NODE_ENV === 'development');
20
+ }
21
+ /**
22
+ * 根据DOI获取论文信息
23
+ * @param doi DOI标识符
24
+ * @returns Promise<Paper | null> 论文信息或null
25
+ */
26
+ async getPaperByDoi(doi) {
27
+ try {
28
+ const results = await this.search(doi, { maxResults: 1 });
29
+ return results.length > 0 ? results[0] : null;
30
+ }
31
+ catch (error) {
32
+ logDebug(`Error getting paper by DOI from ${this.platformName}:`, error);
33
+ return null;
34
+ }
35
+ }
36
+ /**
37
+ * 验证API密钥是否有效
38
+ * @returns Promise<boolean> 是否有效
39
+ */
40
+ async validateApiKey() {
41
+ if (!this.getCapabilities().requiresApiKey) {
42
+ return true;
43
+ }
44
+ if (!this.apiKey) {
45
+ return false;
46
+ }
47
+ try {
48
+ // 尝试一个简单的搜索来验证密钥
49
+ await this.search('test', { maxResults: 1 });
50
+ return true;
51
+ }
52
+ catch (error) {
53
+ return false;
54
+ }
55
+ }
56
+ /**
57
+ * 获取平台名称
58
+ */
59
+ getPlatformName() {
60
+ return this.platformName;
61
+ }
62
+ /**
63
+ * 获取基础URL
64
+ */
65
+ getBaseUrl() {
66
+ return this.baseUrl;
67
+ }
68
+ /**
69
+ * 是否配置了API密钥
70
+ */
71
+ hasApiKey() {
72
+ return !!this.apiKey;
73
+ }
74
+ /**
75
+ * 通用的HTTP请求错误处理 - 使用统一ErrorHandler
76
+ */
77
+ handleHttpError(error, operation) {
78
+ // Delegate to ErrorHandler for unified error handling
79
+ this.errorHandler.handleHttpError(error, operation);
80
+ }
81
+ /**
82
+ * 检查错误是否可重试
83
+ */
84
+ isRetryableError(error) {
85
+ return ErrorHandler.isRetryable(error);
86
+ }
87
+ /**
88
+ * 获取建议的重试延迟
89
+ */
90
+ getRetryDelay(error, attempt = 1) {
91
+ return ErrorHandler.getRetryDelay(error, attempt);
92
+ }
93
+ /**
94
+ * 通用的日期解析
95
+ */
96
+ parseDate(dateString) {
97
+ if (!dateString)
98
+ return null;
99
+ const date = new Date(dateString);
100
+ return isNaN(date.getTime()) ? null : date;
101
+ }
102
+ /**
103
+ * 清理和规范化文本
104
+ */
105
+ cleanText(text) {
106
+ if (!text)
107
+ return '';
108
+ return text
109
+ .replace(/\s+/g, ' ')
110
+ .replace(/\n+/g, ' ')
111
+ .trim();
112
+ }
113
+ /**
114
+ * 从URL中提取文件名
115
+ */
116
+ extractFilename(url, paperId, extension = 'pdf') {
117
+ const urlParts = url.split('/');
118
+ const lastPart = urlParts[urlParts.length - 1];
119
+ if (lastPart && lastPart.includes('.')) {
120
+ return lastPart;
121
+ }
122
+ return `${paperId}.${extension}`;
123
+ }
124
+ }
125
+ //# sourceMappingURL=PaperSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaperSource.js","sourceRoot":"","sources":["../../src/platforms/PaperSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * PubMed E-utilities API集成模块
3
+ * 支持无API密钥的免费使用(3 req/s)和有API密钥的增强使用(10 req/s)
4
+ */
5
+ import { Paper } from '../models/Paper.js';
6
+ import { PaperSource, SearchOptions, DownloadOptions, PlatformCapabilities } from './PaperSource.js';
7
+ interface PubMedSearchOptions extends SearchOptions {
8
+ /** 搜索字段 */
9
+ field?: string;
10
+ /** 出版状态 */
11
+ pubStatus?: string;
12
+ /** 文献类型 */
13
+ publicationType?: string[];
14
+ }
15
+ export declare class PubMedSearcher extends PaperSource {
16
+ private readonly baseApiUrl;
17
+ private readonly rateLimiter;
18
+ private readonly retMax;
19
+ constructor(apiKey?: string);
20
+ getCapabilities(): PlatformCapabilities;
21
+ /**
22
+ * 搜索PubMed文献
23
+ */
24
+ search(query: string, options?: PubMedSearchOptions): Promise<Paper[]>;
25
+ /**
26
+ * 搜索获取PMID列表
27
+ */
28
+ private searchPMIDs;
29
+ /**
30
+ * 获取论文详细信息
31
+ */
32
+ private fetchPaperDetails;
33
+ /**
34
+ * 构建搜索查询
35
+ */
36
+ private buildSearchQuery;
37
+ /**
38
+ * 映射排序字段
39
+ */
40
+ private mapSortField;
41
+ /**
42
+ * 解析XML响应
43
+ */
44
+ private parseXmlResponse;
45
+ /**
46
+ * 解析PubMed文章列表
47
+ */
48
+ private parsePubMedArticles;
49
+ /**
50
+ * 解析单个PubMed文章
51
+ */
52
+ private parsePubMedArticle;
53
+ /**
54
+ * 提取作者信息
55
+ */
56
+ private extractAuthors;
57
+ /**
58
+ * 提取摘要
59
+ */
60
+ private extractAbstract;
61
+ /**
62
+ * 提取发布日期
63
+ */
64
+ private extractPublishedDate;
65
+ /**
66
+ * 解析月份(支持英文和数字)
67
+ */
68
+ private parseMonth;
69
+ /**
70
+ * 提取文章ID(DOI、PMC等)
71
+ */
72
+ private extractArticleIds;
73
+ /**
74
+ * PubMed通常不支持直接PDF下载
75
+ */
76
+ downloadPdf(paperId: string, options?: DownloadOptions): Promise<string>;
77
+ /**
78
+ * PubMed不提供全文内容
79
+ */
80
+ readPaper(paperId: string, options?: DownloadOptions): Promise<string>;
81
+ /**
82
+ * 根据PMID获取论文信息
83
+ */
84
+ getPaperByPmid(pmid: string): Promise<Paper | null>;
85
+ /**
86
+ * 根据DOI获取论文信息
87
+ */
88
+ getPaperByDoi(doi: string): Promise<Paper | null>;
89
+ /**
90
+ * 获取速率限制器状态
91
+ */
92
+ getRateLimiterStatus(): {
93
+ availableTokens: number;
94
+ maxTokens: number;
95
+ requestsPerSecond: number;
96
+ pendingRequests: number;
97
+ };
98
+ /**
99
+ * 验证API密钥(如果提供)
100
+ */
101
+ validateApiKey(): Promise<boolean>;
102
+ }
103
+ export {};
104
+ //# sourceMappingURL=PubMedSearcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PubMedSearcher.d.ts","sourceRoot":"","sources":["../../src/platforms/PubMedSearcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,EAAgB,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMrG,UAAU,mBAAoB,SAAQ,aAAa;IACjD,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AA2GD,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,MAAM,CAAC,EAAE,MAAM;IAa3B,eAAe,IAAI,oBAAoB;IAWvC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA0BhF;;OAEG;YACW,WAAW;IA+CzB;;OAEG;YACW,iBAAiB;IAmC/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+D1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAiBlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAW9E;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5E;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAUzD;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAUvD;;OAEG;IACH,oBAAoB;;;;;;IAIpB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAiBzC"}