paper-search-cli 0.3.1 → 0.3.2

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 (304) hide show
  1. package/README.md +1 -1
  2. package/README.zh.md +1 -1
  3. package/dist/capabilities/body-snippet-search/handler.d.ts +9 -0
  4. package/dist/capabilities/body-snippet-search/handler.d.ts.map +1 -0
  5. package/dist/capabilities/body-snippet-search/handler.js +17 -0
  6. package/dist/capabilities/body-snippet-search/handler.js.map +1 -0
  7. package/dist/capabilities/body-snippet-search/index.d.ts +7 -0
  8. package/dist/capabilities/body-snippet-search/index.d.ts.map +1 -0
  9. package/dist/capabilities/body-snippet-search/index.js +6 -0
  10. package/dist/capabilities/body-snippet-search/index.js.map +1 -0
  11. package/dist/capabilities/body-snippet-search/schemas.d.ts +36 -0
  12. package/dist/capabilities/body-snippet-search/schemas.d.ts.map +1 -0
  13. package/dist/capabilities/body-snippet-search/schemas.js +16 -0
  14. package/dist/capabilities/body-snippet-search/schemas.js.map +1 -0
  15. package/dist/capabilities/body-snippet-search/service.d.ts +4 -0
  16. package/dist/capabilities/body-snippet-search/service.d.ts.map +1 -0
  17. package/dist/capabilities/body-snippet-search/service.js +4 -0
  18. package/dist/capabilities/body-snippet-search/service.js.map +1 -0
  19. package/dist/capabilities/body-snippet-search/tools.d.ts +187 -0
  20. package/dist/capabilities/body-snippet-search/tools.d.ts.map +1 -0
  21. package/dist/capabilities/body-snippet-search/tools.js +49 -0
  22. package/dist/capabilities/body-snippet-search/tools.js.map +1 -0
  23. package/dist/capabilities/body-snippet-search/types.d.ts +14 -0
  24. package/dist/capabilities/body-snippet-search/types.d.ts.map +1 -0
  25. package/dist/capabilities/body-snippet-search/types.js +2 -0
  26. package/dist/capabilities/body-snippet-search/types.js.map +1 -0
  27. package/dist/capabilities/citation-expansion/CitationService.d.ts +47 -0
  28. package/dist/capabilities/citation-expansion/CitationService.d.ts.map +1 -0
  29. package/dist/capabilities/citation-expansion/CitationService.js +243 -0
  30. package/dist/capabilities/citation-expansion/CitationService.js.map +1 -0
  31. package/dist/capabilities/citation-expansion/handler.d.ts +36 -0
  32. package/dist/capabilities/citation-expansion/handler.d.ts.map +1 -0
  33. package/dist/capabilities/citation-expansion/handler.js +44 -0
  34. package/dist/capabilities/citation-expansion/handler.js.map +1 -0
  35. package/dist/capabilities/citation-expansion/index.d.ts +6 -0
  36. package/dist/capabilities/citation-expansion/index.d.ts.map +1 -0
  37. package/dist/capabilities/citation-expansion/index.js +5 -0
  38. package/dist/capabilities/citation-expansion/index.js.map +1 -0
  39. package/dist/capabilities/citation-expansion/schemas.d.ts +28 -0
  40. package/dist/capabilities/citation-expansion/schemas.d.ts.map +1 -0
  41. package/dist/capabilities/citation-expansion/schemas.js +13 -0
  42. package/dist/capabilities/citation-expansion/schemas.js.map +1 -0
  43. package/dist/capabilities/citation-expansion/tools.d.ts +82 -0
  44. package/dist/capabilities/citation-expansion/tools.d.ts.map +1 -0
  45. package/dist/capabilities/citation-expansion/tools.js +48 -0
  46. package/dist/capabilities/citation-expansion/tools.js.map +1 -0
  47. package/dist/capabilities/citation-expansion/types.d.ts +22 -0
  48. package/dist/capabilities/citation-expansion/types.d.ts.map +1 -0
  49. package/dist/capabilities/citation-expansion/types.js +2 -0
  50. package/dist/capabilities/citation-expansion/types.js.map +1 -0
  51. package/dist/capabilities/journal-metrics/JournalMetricsService.d.ts +3 -0
  52. package/dist/capabilities/journal-metrics/JournalMetricsService.d.ts.map +1 -0
  53. package/dist/capabilities/journal-metrics/JournalMetricsService.js +142 -0
  54. package/dist/capabilities/journal-metrics/JournalMetricsService.js.map +1 -0
  55. package/dist/capabilities/journal-metrics/handler.d.ts +12 -0
  56. package/dist/capabilities/journal-metrics/handler.d.ts.map +1 -0
  57. package/dist/capabilities/journal-metrics/handler.js +38 -0
  58. package/dist/capabilities/journal-metrics/handler.js.map +1 -0
  59. package/dist/capabilities/journal-metrics/index.d.ts +6 -0
  60. package/dist/capabilities/journal-metrics/index.d.ts.map +1 -0
  61. package/dist/capabilities/journal-metrics/index.js +5 -0
  62. package/dist/capabilities/journal-metrics/index.js.map +1 -0
  63. package/dist/capabilities/journal-metrics/schemas.d.ts +28 -0
  64. package/dist/capabilities/journal-metrics/schemas.d.ts.map +1 -0
  65. package/dist/capabilities/journal-metrics/schemas.js +13 -0
  66. package/dist/capabilities/journal-metrics/schemas.js.map +1 -0
  67. package/dist/capabilities/journal-metrics/tools.d.ts +67 -0
  68. package/dist/capabilities/journal-metrics/tools.d.ts.map +1 -0
  69. package/dist/capabilities/journal-metrics/tools.js +27 -0
  70. package/dist/capabilities/journal-metrics/tools.js.map +1 -0
  71. package/dist/capabilities/journal-metrics/types.d.ts +36 -0
  72. package/dist/capabilities/journal-metrics/types.d.ts.map +1 -0
  73. package/dist/capabilities/journal-metrics/types.js +2 -0
  74. package/dist/capabilities/journal-metrics/types.js.map +1 -0
  75. package/dist/capabilities/metadata-search/MultiSourceSearchService.d.ts +9 -0
  76. package/dist/capabilities/metadata-search/MultiSourceSearchService.d.ts.map +1 -0
  77. package/dist/capabilities/metadata-search/MultiSourceSearchService.js +78 -0
  78. package/dist/capabilities/metadata-search/MultiSourceSearchService.js.map +1 -0
  79. package/dist/capabilities/metadata-search/handler.d.ts +23 -0
  80. package/dist/capabilities/metadata-search/handler.d.ts.map +1 -0
  81. package/dist/capabilities/metadata-search/handler.js +163 -0
  82. package/dist/capabilities/metadata-search/handler.js.map +1 -0
  83. package/dist/capabilities/metadata-search/index.d.ts +6 -0
  84. package/dist/capabilities/metadata-search/index.d.ts.map +1 -0
  85. package/dist/capabilities/metadata-search/index.js +5 -0
  86. package/dist/capabilities/metadata-search/index.js.map +1 -0
  87. package/dist/capabilities/metadata-search/schemas.d.ts +83 -0
  88. package/dist/capabilities/metadata-search/schemas.d.ts.map +1 -0
  89. package/dist/capabilities/metadata-search/schemas.js +81 -0
  90. package/dist/capabilities/metadata-search/schemas.js.map +1 -0
  91. package/dist/capabilities/metadata-search/tools.d.ts +178 -0
  92. package/dist/capabilities/metadata-search/tools.d.ts.map +1 -0
  93. package/dist/capabilities/metadata-search/tools.js +75 -0
  94. package/dist/capabilities/metadata-search/tools.js.map +1 -0
  95. package/dist/capabilities/metadata-search/types.d.ts +13 -0
  96. package/dist/capabilities/metadata-search/types.d.ts.map +1 -0
  97. package/dist/capabilities/metadata-search/types.js +2 -0
  98. package/dist/capabilities/metadata-search/types.js.map +1 -0
  99. package/dist/capabilities/pdf-discovery/DownloadTier.d.ts +22 -0
  100. package/dist/capabilities/pdf-discovery/DownloadTier.d.ts.map +1 -0
  101. package/dist/capabilities/pdf-discovery/DownloadTier.js +2 -0
  102. package/dist/capabilities/pdf-discovery/DownloadTier.js.map +1 -0
  103. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.d.ts +10 -0
  104. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.d.ts.map +1 -0
  105. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.js +53 -0
  106. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.js.map +1 -0
  107. package/dist/capabilities/pdf-discovery/handler.d.ts +19 -0
  108. package/dist/capabilities/pdf-discovery/handler.d.ts.map +1 -0
  109. package/dist/capabilities/pdf-discovery/handler.js +56 -0
  110. package/dist/capabilities/pdf-discovery/handler.js.map +1 -0
  111. package/dist/capabilities/pdf-discovery/index.d.ts +7 -0
  112. package/dist/capabilities/pdf-discovery/index.d.ts.map +1 -0
  113. package/dist/capabilities/pdf-discovery/index.js +5 -0
  114. package/dist/capabilities/pdf-discovery/index.js.map +1 -0
  115. package/dist/capabilities/pdf-discovery/schemas.d.ts +37 -0
  116. package/dist/capabilities/pdf-discovery/schemas.d.ts.map +1 -0
  117. package/dist/capabilities/pdf-discovery/schemas.js +22 -0
  118. package/dist/capabilities/pdf-discovery/schemas.js.map +1 -0
  119. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.d.ts +3 -0
  120. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.d.ts.map +1 -0
  121. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.js +27 -0
  122. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.js.map +1 -0
  123. package/dist/capabilities/pdf-discovery/tiers/primary.d.ts +3 -0
  124. package/dist/capabilities/pdf-discovery/tiers/primary.d.ts.map +1 -0
  125. package/dist/capabilities/pdf-discovery/tiers/primary.js +21 -0
  126. package/dist/capabilities/pdf-discovery/tiers/primary.js.map +1 -0
  127. package/dist/capabilities/pdf-discovery/tiers/repositories.d.ts +3 -0
  128. package/dist/capabilities/pdf-discovery/tiers/repositories.d.ts.map +1 -0
  129. package/dist/capabilities/pdf-discovery/tiers/repositories.js +35 -0
  130. package/dist/capabilities/pdf-discovery/tiers/repositories.js.map +1 -0
  131. package/dist/capabilities/pdf-discovery/tiers/scihub.d.ts +3 -0
  132. package/dist/capabilities/pdf-discovery/tiers/scihub.d.ts.map +1 -0
  133. package/dist/capabilities/pdf-discovery/tiers/scihub.js +21 -0
  134. package/dist/capabilities/pdf-discovery/tiers/scihub.js.map +1 -0
  135. package/dist/capabilities/pdf-discovery/tiers/unpaywall.d.ts +3 -0
  136. package/dist/capabilities/pdf-discovery/tiers/unpaywall.d.ts.map +1 -0
  137. package/dist/capabilities/pdf-discovery/tiers/unpaywall.js +29 -0
  138. package/dist/capabilities/pdf-discovery/tiers/unpaywall.js.map +1 -0
  139. package/dist/capabilities/pdf-discovery/tools.d.ts +114 -0
  140. package/dist/capabilities/pdf-discovery/tools.d.ts.map +1 -0
  141. package/dist/capabilities/pdf-discovery/tools.js +42 -0
  142. package/dist/capabilities/pdf-discovery/tools.js.map +1 -0
  143. package/dist/capabilities/pdf-discovery/types.d.ts +19 -0
  144. package/dist/capabilities/pdf-discovery/types.d.ts.map +1 -0
  145. package/dist/capabilities/pdf-discovery/types.js +2 -0
  146. package/dist/capabilities/pdf-discovery/types.js.map +1 -0
  147. package/dist/cli.js +6 -6
  148. package/dist/cli.js.map +1 -1
  149. package/dist/core/capabilityProfile.d.ts +1 -17
  150. package/dist/core/capabilityProfile.d.ts.map +1 -1
  151. package/dist/core/capabilityProfile.js +1 -166
  152. package/dist/core/capabilityProfile.js.map +1 -1
  153. package/dist/core/diagnostics.d.ts +1 -42
  154. package/dist/core/diagnostics.d.ts.map +1 -1
  155. package/dist/core/diagnostics.js +1 -585
  156. package/dist/core/diagnostics.js.map +1 -1
  157. package/dist/core/handleToolCall.d.ts +1 -0
  158. package/dist/core/handleToolCall.d.ts.map +1 -1
  159. package/dist/core/handleToolCall.js +265 -509
  160. package/dist/core/handleToolCall.js.map +1 -1
  161. package/dist/core/httpPolicies.d.ts +2 -0
  162. package/dist/core/httpPolicies.d.ts.map +1 -0
  163. package/dist/core/httpPolicies.js +2 -0
  164. package/dist/core/httpPolicies.js.map +1 -0
  165. package/dist/core/liveSmoke.d.ts +1 -41
  166. package/dist/core/liveSmoke.d.ts.map +1 -1
  167. package/dist/core/liveSmoke.js +1 -225
  168. package/dist/core/liveSmoke.js.map +1 -1
  169. package/dist/core/platformFactories.d.ts +2 -0
  170. package/dist/core/platformFactories.d.ts.map +1 -0
  171. package/dist/core/platformFactories.js +2 -0
  172. package/dist/core/platformFactories.js.map +1 -0
  173. package/dist/core/platformMetadata.d.ts +1 -27
  174. package/dist/core/platformMetadata.d.ts.map +1 -1
  175. package/dist/core/platformMetadata.js +1 -257
  176. package/dist/core/platformMetadata.js.map +1 -1
  177. package/dist/core/schemas.d.ts +10 -202
  178. package/dist/core/schemas.d.ts.map +1 -1
  179. package/dist/core/schemas.js +11 -118
  180. package/dist/core/schemas.js.map +1 -1
  181. package/dist/core/searchers.d.ts +24 -24
  182. package/dist/core/searchers.d.ts.map +1 -1
  183. package/dist/core/searchers.js +14 -79
  184. package/dist/core/searchers.js.map +1 -1
  185. package/dist/core/textReports.d.ts +1 -20
  186. package/dist/core/textReports.d.ts.map +1 -1
  187. package/dist/core/textReports.js +1 -84
  188. package/dist/core/textReports.js.map +1 -1
  189. package/dist/core/tools.d.ts.map +1 -1
  190. package/dist/core/tools.js +15 -237
  191. package/dist/core/tools.js.map +1 -1
  192. package/dist/infrastructure/cache/RequestCache.d.ts +26 -0
  193. package/dist/infrastructure/cache/RequestCache.d.ts.map +1 -0
  194. package/dist/infrastructure/cache/RequestCache.js +66 -0
  195. package/dist/infrastructure/cache/RequestCache.js.map +1 -0
  196. package/dist/infrastructure/http/ErrorHandler.d.ts +99 -0
  197. package/dist/infrastructure/http/ErrorHandler.d.ts.map +1 -0
  198. package/dist/infrastructure/http/ErrorHandler.js +266 -0
  199. package/dist/infrastructure/http/ErrorHandler.js.map +1 -0
  200. package/dist/infrastructure/http/HttpClient.d.ts +31 -0
  201. package/dist/infrastructure/http/HttpClient.d.ts.map +1 -0
  202. package/dist/infrastructure/http/HttpClient.js +50 -0
  203. package/dist/infrastructure/http/HttpClient.js.map +1 -0
  204. package/dist/infrastructure/pdf/PDFExtractor.d.ts +34 -0
  205. package/dist/infrastructure/pdf/PDFExtractor.d.ts.map +1 -0
  206. package/dist/infrastructure/pdf/PDFExtractor.js +130 -0
  207. package/dist/infrastructure/pdf/PDFExtractor.js.map +1 -0
  208. package/dist/infrastructure/pdf/PdfDownload.d.ts +7 -0
  209. package/dist/infrastructure/pdf/PdfDownload.d.ts.map +1 -0
  210. package/dist/infrastructure/pdf/PdfDownload.js +175 -0
  211. package/dist/infrastructure/pdf/PdfDownload.js.map +1 -0
  212. package/dist/infrastructure/rate-limit/RateLimiter.d.ts +50 -0
  213. package/dist/infrastructure/rate-limit/RateLimiter.d.ts.map +1 -0
  214. package/dist/infrastructure/rate-limit/RateLimiter.js +128 -0
  215. package/dist/infrastructure/rate-limit/RateLimiter.js.map +1 -0
  216. package/dist/infrastructure/security/SecurityUtils.d.ts +80 -0
  217. package/dist/infrastructure/security/SecurityUtils.d.ts.map +1 -0
  218. package/dist/infrastructure/security/SecurityUtils.js +357 -0
  219. package/dist/infrastructure/security/SecurityUtils.js.map +1 -0
  220. package/dist/management/capability-profile/index.d.ts +18 -0
  221. package/dist/management/capability-profile/index.d.ts.map +1 -0
  222. package/dist/management/capability-profile/index.js +167 -0
  223. package/dist/management/capability-profile/index.js.map +1 -0
  224. package/dist/management/config/index.d.ts +2 -0
  225. package/dist/management/config/index.d.ts.map +1 -0
  226. package/dist/management/config/index.js +2 -0
  227. package/dist/management/config/index.js.map +1 -0
  228. package/dist/management/diagnostics/index.d.ts +43 -0
  229. package/dist/management/diagnostics/index.d.ts.map +1 -0
  230. package/dist/management/diagnostics/index.js +586 -0
  231. package/dist/management/diagnostics/index.js.map +1 -0
  232. package/dist/management/reports/index.d.ts +21 -0
  233. package/dist/management/reports/index.d.ts.map +1 -0
  234. package/dist/management/reports/index.js +85 -0
  235. package/dist/management/reports/index.js.map +1 -0
  236. package/dist/management/skills/index.d.ts +2 -0
  237. package/dist/management/skills/index.d.ts.map +1 -0
  238. package/dist/management/skills/index.js +2 -0
  239. package/dist/management/skills/index.js.map +1 -0
  240. package/dist/management/smoke/index.d.ts +42 -0
  241. package/dist/management/smoke/index.d.ts.map +1 -0
  242. package/dist/management/smoke/index.js +226 -0
  243. package/dist/management/smoke/index.js.map +1 -0
  244. package/dist/registry/aliases.d.ts +2 -0
  245. package/dist/registry/aliases.d.ts.map +1 -0
  246. package/dist/registry/aliases.js +2 -0
  247. package/dist/registry/aliases.js.map +1 -0
  248. package/dist/registry/httpPolicies.d.ts +3 -0
  249. package/dist/registry/httpPolicies.d.ts.map +1 -0
  250. package/dist/registry/httpPolicies.js +17 -0
  251. package/dist/registry/httpPolicies.js.map +1 -0
  252. package/dist/registry/platformFactories.d.ts +8 -0
  253. package/dist/registry/platformFactories.d.ts.map +1 -0
  254. package/dist/registry/platformFactories.js +55 -0
  255. package/dist/registry/platformFactories.js.map +1 -0
  256. package/dist/registry/platformMetadata.d.ts +39 -0
  257. package/dist/registry/platformMetadata.d.ts.map +1 -0
  258. package/dist/registry/platformMetadata.js +321 -0
  259. package/dist/registry/platformMetadata.js.map +1 -0
  260. package/dist/services/CitationService.d.ts +2 -65
  261. package/dist/services/CitationService.d.ts.map +1 -1
  262. package/dist/services/CitationService.js +1 -242
  263. package/dist/services/CitationService.js.map +1 -1
  264. package/dist/services/JournalMetricsService.d.ts +2 -37
  265. package/dist/services/JournalMetricsService.d.ts.map +1 -1
  266. package/dist/services/JournalMetricsService.js +1 -141
  267. package/dist/services/JournalMetricsService.js.map +1 -1
  268. package/dist/services/MultiSourceSearchService.d.ts +2 -18
  269. package/dist/services/MultiSourceSearchService.d.ts.map +1 -1
  270. package/dist/services/MultiSourceSearchService.js +1 -77
  271. package/dist/services/MultiSourceSearchService.js.map +1 -1
  272. package/dist/services/OpenAccessFallbackService.d.ts +3 -40
  273. package/dist/services/OpenAccessFallbackService.d.ts.map +1 -1
  274. package/dist/services/OpenAccessFallbackService.js +1 -146
  275. package/dist/services/OpenAccessFallbackService.js.map +1 -1
  276. package/dist/utils/ErrorHandler.d.ts +2 -98
  277. package/dist/utils/ErrorHandler.d.ts.map +1 -1
  278. package/dist/utils/ErrorHandler.js +2 -265
  279. package/dist/utils/ErrorHandler.js.map +1 -1
  280. package/dist/utils/HttpClient.d.ts +1 -5
  281. package/dist/utils/HttpClient.d.ts.map +1 -1
  282. package/dist/utils/HttpClient.js +1 -29
  283. package/dist/utils/HttpClient.js.map +1 -1
  284. package/dist/utils/PDFExtractor.d.ts +2 -33
  285. package/dist/utils/PDFExtractor.d.ts.map +1 -1
  286. package/dist/utils/PDFExtractor.js +2 -129
  287. package/dist/utils/PDFExtractor.js.map +1 -1
  288. package/dist/utils/PdfDownload.d.ts +1 -6
  289. package/dist/utils/PdfDownload.d.ts.map +1 -1
  290. package/dist/utils/PdfDownload.js +1 -141
  291. package/dist/utils/PdfDownload.js.map +1 -1
  292. package/dist/utils/RateLimiter.d.ts +1 -49
  293. package/dist/utils/RateLimiter.d.ts.map +1 -1
  294. package/dist/utils/RateLimiter.js +1 -127
  295. package/dist/utils/RateLimiter.js.map +1 -1
  296. package/dist/utils/RequestCache.d.ts +2 -25
  297. package/dist/utils/RequestCache.d.ts.map +1 -1
  298. package/dist/utils/RequestCache.js +2 -65
  299. package/dist/utils/RequestCache.js.map +1 -1
  300. package/dist/utils/SecurityUtils.d.ts +2 -79
  301. package/dist/utils/SecurityUtils.d.ts.map +1 -1
  302. package/dist/utils/SecurityUtils.js +2 -356
  303. package/dist/utils/SecurityUtils.js.map +1 -1
  304. package/package.json +1 -1
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Unified Error Handler for API requests
3
+ * Provides consistent error handling across all platforms
4
+ */
5
+ import { sanitizeRequest, maskSensitiveData } from '../security/SecurityUtils.js';
6
+ import { logError as loggerError, logDebug } from '../../utils/Logger.js';
7
+ /**
8
+ * API Error codes and their meanings
9
+ */
10
+ export const HTTP_ERROR_CODES = {
11
+ 400: 'Bad Request - Invalid parameters or syntax',
12
+ 401: 'Unauthorized - Invalid or missing API key',
13
+ 403: 'Forbidden - Access denied or rate limit exceeded',
14
+ 404: 'Not Found - Resource does not exist',
15
+ 405: 'Method Not Allowed - HTTP method not supported',
16
+ 408: 'Request Timeout - Server took too long to respond',
17
+ 429: 'Too Many Requests - Rate limit exceeded',
18
+ 500: 'Internal Server Error - Server error',
19
+ 502: 'Bad Gateway - Server communication error',
20
+ 503: 'Service Unavailable - Server temporarily unavailable',
21
+ 504: 'Gateway Timeout - Server timeout'
22
+ };
23
+ /**
24
+ * Custom API Error class with detailed information
25
+ */
26
+ export class ApiError extends Error {
27
+ status;
28
+ platform;
29
+ operation;
30
+ timestamp;
31
+ retryable;
32
+ details;
33
+ constructor(options) {
34
+ super(options.message);
35
+ this.name = 'ApiError';
36
+ this.status = options.status;
37
+ this.platform = options.platform;
38
+ this.operation = options.operation;
39
+ this.timestamp = new Date().toISOString();
40
+ this.details = options.details;
41
+ // Determine if error is retryable
42
+ this.retryable = this.isRetryable(options.status);
43
+ }
44
+ isRetryable(status) {
45
+ if (!status)
46
+ return true;
47
+ // Retryable: rate limits, timeouts, server errors
48
+ return [408, 429, 500, 502, 503, 504].includes(status);
49
+ }
50
+ toJSON() {
51
+ return {
52
+ name: this.name,
53
+ message: this.message,
54
+ status: this.status,
55
+ platform: this.platform,
56
+ operation: this.operation,
57
+ timestamp: this.timestamp,
58
+ retryable: this.retryable
59
+ };
60
+ }
61
+ }
62
+ /**
63
+ * Error Handler class for unified error processing
64
+ */
65
+ export class ErrorHandler {
66
+ platform;
67
+ verbose;
68
+ constructor(platform, verbose = false) {
69
+ this.platform = platform;
70
+ this.verbose = verbose || process.env.NODE_ENV === 'development';
71
+ }
72
+ /**
73
+ * Handle HTTP errors from axios or similar libraries
74
+ */
75
+ handleHttpError(error, operation) {
76
+ const status = error.response?.status;
77
+ const responseMessage = this.extractErrorMessage(error);
78
+ const url = error.config?.url;
79
+ const method = error.config?.method?.toUpperCase() || 'GET';
80
+ // Sanitize sensitive data before logging
81
+ const sanitizedConfig = sanitizeRequest(error.config);
82
+ const sanitizedUrl = url ? this.sanitizeUrl(url) : 'unknown';
83
+ // Log error details (sanitized)
84
+ this.logError({
85
+ status,
86
+ message: responseMessage,
87
+ url: sanitizedUrl,
88
+ method,
89
+ operation,
90
+ config: this.verbose ? sanitizedConfig : undefined,
91
+ responseData: this.verbose ? error.response?.data : undefined
92
+ });
93
+ // Create user-friendly error message
94
+ const userMessage = this.createUserMessage(status, responseMessage, operation);
95
+ throw new ApiError({
96
+ message: userMessage,
97
+ status,
98
+ platform: this.platform,
99
+ operation,
100
+ details: this.verbose ? { url: sanitizedUrl, method } : undefined
101
+ });
102
+ }
103
+ /**
104
+ * Handle generic errors
105
+ */
106
+ handleError(error, operation) {
107
+ if (error.response) {
108
+ // HTTP error
109
+ this.handleHttpError(error, operation);
110
+ }
111
+ const message = error.message || 'Unknown error occurred';
112
+ this.logError({
113
+ message,
114
+ operation,
115
+ stack: this.verbose ? error.stack : undefined
116
+ });
117
+ throw new ApiError({
118
+ message: `${this.platform} ${operation} failed: ${message}`,
119
+ platform: this.platform,
120
+ operation
121
+ });
122
+ }
123
+ /**
124
+ * Extract error message from various error formats
125
+ */
126
+ extractErrorMessage(error) {
127
+ // Try different error message locations
128
+ const candidates = [
129
+ error.response?.data?.message,
130
+ error.response?.data?.error?.message,
131
+ error.response?.data?.error?.error_description,
132
+ error.response?.data?.error,
133
+ error.response?.data?.detail,
134
+ error.response?.data?.['service-error']?.status?.statusText,
135
+ error.response?.data?.apiMessage,
136
+ error.response?.statusText,
137
+ error.message
138
+ ];
139
+ for (const candidate of candidates) {
140
+ if (candidate && typeof candidate === 'string') {
141
+ return candidate;
142
+ }
143
+ }
144
+ return 'Unknown error';
145
+ }
146
+ /**
147
+ * Create user-friendly error message
148
+ */
149
+ createUserMessage(status, message, operation) {
150
+ const statusDesc = status ? HTTP_ERROR_CODES[status] : '';
151
+ // Platform-specific messages
152
+ if (status === 401) {
153
+ if (/not authorized|insufficient|permission|entitlement|access.*requested/i.test(message)) {
154
+ return `${this.platform}: API key was accepted but does not have permission for this API product, view, or resource.`;
155
+ }
156
+ return `${this.platform}: Invalid or missing API key. Please check your credentials.`;
157
+ }
158
+ if (status === 403) {
159
+ return `${this.platform}: Access forbidden. This may be due to rate limiting or insufficient permissions.`;
160
+ }
161
+ if (status === 404) {
162
+ return `${this.platform}: Resource not found. The requested item may not exist.`;
163
+ }
164
+ if (status === 429) {
165
+ return `${this.platform}: Rate limit exceeded. Please wait before making more requests.`;
166
+ }
167
+ if (status && status >= 500) {
168
+ return `${this.platform}: Server error (${status}). The service may be temporarily unavailable.`;
169
+ }
170
+ // Generic message
171
+ const prefix = `${this.platform} ${operation} failed`;
172
+ const statusInfo = status ? ` (${status}${statusDesc ? ': ' + statusDesc : ''})` : '';
173
+ return `${prefix}${statusInfo}: ${maskSensitiveData(message)}`;
174
+ }
175
+ /**
176
+ * Sanitize URL for logging
177
+ */
178
+ sanitizeUrl(url) {
179
+ try {
180
+ const urlObj = new URL(url);
181
+ // Remove sensitive query parameters
182
+ const sensitiveParams = ['api_key', 'apikey', 'key', 'token', 'secret', 'auth'];
183
+ sensitiveParams.forEach(param => {
184
+ if (urlObj.searchParams.has(param)) {
185
+ urlObj.searchParams.set(param, '***');
186
+ }
187
+ });
188
+ return urlObj.toString();
189
+ }
190
+ catch {
191
+ // If URL parsing fails, mask the entire thing
192
+ return '***sanitized-url***';
193
+ }
194
+ }
195
+ /**
196
+ * Log error with consistent format
197
+ */
198
+ logError(details) {
199
+ loggerError(`[${this.platform}] Error:`, {
200
+ timestamp: new Date().toISOString(),
201
+ ...details
202
+ });
203
+ }
204
+ /**
205
+ * Check if an error is retryable
206
+ */
207
+ static isRetryable(error) {
208
+ if (error instanceof ApiError) {
209
+ return error.retryable;
210
+ }
211
+ const status = error.response?.status;
212
+ if (!status)
213
+ return true;
214
+ return [408, 429, 500, 502, 503, 504].includes(status);
215
+ }
216
+ /**
217
+ * Get suggested retry delay based on error
218
+ */
219
+ static getRetryDelay(error, attempt = 1) {
220
+ const status = error.response?.status || error.status;
221
+ // For rate limiting, check Retry-After header
222
+ if (status === 429) {
223
+ const retryAfter = error.response?.headers?.['retry-after'];
224
+ if (retryAfter) {
225
+ const seconds = parseInt(retryAfter, 10);
226
+ if (!isNaN(seconds)) {
227
+ return seconds * 1000;
228
+ }
229
+ }
230
+ // Default: exponential backoff for rate limits
231
+ return Math.min(60000, 1000 * Math.pow(2, attempt));
232
+ }
233
+ // For server errors, use exponential backoff
234
+ if (status && status >= 500) {
235
+ return Math.min(30000, 1000 * Math.pow(2, attempt));
236
+ }
237
+ // Default delay
238
+ return 1000 * attempt;
239
+ }
240
+ /**
241
+ * Retry a function with exponential backoff and full jitter
242
+ */
243
+ static async retryWithBackoff(fn, options = {}) {
244
+ const { maxRetries = 3, initialDelayMs = 1000, maxDelayMs = 30000, context = 'operation' } = options;
245
+ let lastError;
246
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
247
+ try {
248
+ return await fn();
249
+ }
250
+ catch (error) {
251
+ lastError = error;
252
+ if (attempt >= maxRetries || !ErrorHandler.isRetryable(error)) {
253
+ throw error;
254
+ }
255
+ // Exponential backoff with full jitter
256
+ const baseDelay = Math.min(maxDelayMs, initialDelayMs * Math.pow(2, attempt));
257
+ const jitteredDelay = Math.floor(Math.random() * baseDelay);
258
+ logDebug(`[Retry] ${context} attempt ${attempt + 1}/${maxRetries} failed, retrying in ${jitteredDelay}ms`);
259
+ await new Promise(resolve => setTimeout(resolve, jitteredDelay));
260
+ }
261
+ }
262
+ throw lastError;
263
+ }
264
+ }
265
+ export default ErrorHandler;
266
+ //# sourceMappingURL=ErrorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandler.js","sourceRoot":"","sources":["../../../src/infrastructure/http/ErrorHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type AxiosRequestConfig } from 'axios';
2
+ export interface HttpPolicy {
3
+ rateLimit?: {
4
+ rps: number;
5
+ burst?: number;
6
+ };
7
+ cache?: {
8
+ ttlMs: number;
9
+ maxSize?: number;
10
+ };
11
+ timeoutMs?: number;
12
+ retry?: {
13
+ maxRetries: number;
14
+ };
15
+ userAgent?: string;
16
+ validateStatus?: (status: number) => boolean;
17
+ }
18
+ export interface HttpRequestConfig extends AxiosRequestConfig {
19
+ cacheKey?: string;
20
+ }
21
+ export declare class HttpClient {
22
+ private readonly policy;
23
+ constructor(policy?: HttpPolicy);
24
+ request<T>(config: HttpRequestConfig): Promise<T>;
25
+ }
26
+ /**
27
+ * Initializes global HTTP/HTTPS and SOCKS proxy agents for Axios
28
+ * based on standard proxy environment variables.
29
+ */
30
+ export declare function setupGlobalProxy(): void;
31
+ //# sourceMappingURL=HttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAKvD,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,UAAe;IAE9C,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;CAcxD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAuBvC"}
@@ -0,0 +1,50 @@
1
+ import axios from 'axios';
2
+ import { HttpsProxyAgent } from 'https-proxy-agent';
3
+ import { SocksProxyAgent } from 'socks-proxy-agent';
4
+ import { logDebug } from '../../utils/Logger.js';
5
+ export class HttpClient {
6
+ policy;
7
+ constructor(policy = {}) {
8
+ this.policy = policy;
9
+ }
10
+ async request(config) {
11
+ const response = await axios.request({
12
+ ...config,
13
+ timeout: config.timeout ?? this.policy.timeoutMs,
14
+ validateStatus: config.validateStatus ?? this.policy.validateStatus,
15
+ headers: this.policy.userAgent
16
+ ? {
17
+ ...config.headers,
18
+ 'User-Agent': this.policy.userAgent
19
+ }
20
+ : config.headers
21
+ });
22
+ return response.data;
23
+ }
24
+ }
25
+ /**
26
+ * Initializes global HTTP/HTTPS and SOCKS proxy agents for Axios
27
+ * based on standard proxy environment variables.
28
+ */
29
+ export function setupGlobalProxy() {
30
+ const proxy = process.env.HTTPS_PROXY ||
31
+ process.env.HTTP_PROXY ||
32
+ process.env.https_proxy ||
33
+ process.env.http_proxy;
34
+ if (!proxy) {
35
+ return;
36
+ }
37
+ try {
38
+ logDebug(`Configuring global HTTP/HTTPS proxy: ${proxy}`);
39
+ const agent = proxy.startsWith('socks')
40
+ ? new SocksProxyAgent(proxy)
41
+ : new HttpsProxyAgent(proxy);
42
+ // Inject agent as default for both http and https protocols
43
+ axios.defaults.httpAgent = agent;
44
+ axios.defaults.httpsAgent = agent;
45
+ }
46
+ catch (error) {
47
+ logDebug(`Failed to initialize global proxy agent: ${error.message}`);
48
+ }
49
+ }
50
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../../src/infrastructure/http/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAkC,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAejD,MAAM,OAAO,UAAU;IACQ;IAA7B,YAA6B,SAAqB,EAAE;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,KAAK,CAAC,OAAO,CAAI,MAAyB;QACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAI;YACtC,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;YAChD,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc;YACnE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;gBAC5B,CAAC,CAAC;oBACE,GAAG,MAAM,CAAC,OAAO;oBACjB,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;iBACpC;gBACH,CAAC,CAAC,MAAM,CAAC,OAAO;SACnB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,CAAC,wCAAwC,KAAK,EAAE,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;YACrC,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;QAE/B,4DAA4D;QAC5D,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC;QACjC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;IACpC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,QAAQ,CAAC,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ export interface PDFExtractOptions {
2
+ maxPages?: number;
3
+ cleanText?: boolean;
4
+ }
5
+ export interface PDFExtractResult {
6
+ text: string;
7
+ numPages: number;
8
+ info?: any;
9
+ metadata?: any;
10
+ }
11
+ export declare class PDFExtractor {
12
+ /**
13
+ * Download PDF from URL and extract text
14
+ */
15
+ extractFromUrl(url: string, options?: PDFExtractOptions): Promise<PDFExtractResult>;
16
+ /**
17
+ * Extract text from PDF file
18
+ */
19
+ extractFromFile(filePath: string, options?: PDFExtractOptions): Promise<PDFExtractResult>;
20
+ /**
21
+ * Extract text from PDF buffer
22
+ */
23
+ extractFromBuffer(buffer: Buffer, options?: PDFExtractOptions): Promise<PDFExtractResult>;
24
+ /**
25
+ * Clean extracted text
26
+ */
27
+ private cleanText;
28
+ /**
29
+ * Download PDF and save to file
30
+ */
31
+ downloadPdf(url: string, savePath: string): Promise<string>;
32
+ }
33
+ export default PDFExtractor;
34
+ //# sourceMappingURL=PDFExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PDFExtractor.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/pdf/PDFExtractor.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyB7F;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgBnG;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8BnG;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAkClE;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,130 @@
1
+ import axios from 'axios';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ // @ts-ignore - pdf-parse doesn't have type definitions
5
+ import pdf from 'pdf-parse';
6
+ import { logDebug, logWarn } from '../../utils/Logger.js';
7
+ import { TIMEOUTS, USER_AGENT } from '../../config/constants.js';
8
+ export class PDFExtractor {
9
+ /**
10
+ * Download PDF from URL and extract text
11
+ */
12
+ async extractFromUrl(url, options = {}) {
13
+ try {
14
+ logDebug(`Downloading PDF from: ${url}`);
15
+ const response = await axios.get(url, {
16
+ responseType: 'arraybuffer',
17
+ timeout: TIMEOUTS.DOWNLOAD,
18
+ headers: {
19
+ 'User-Agent': USER_AGENT,
20
+ 'Accept': 'application/pdf'
21
+ }
22
+ });
23
+ if (response.status !== 200) {
24
+ throw new Error(`Failed to download PDF: HTTP ${response.status}`);
25
+ }
26
+ const buffer = Buffer.from(response.data);
27
+ return await this.extractFromBuffer(buffer, options);
28
+ }
29
+ catch (error) {
30
+ logWarn(`Error downloading PDF from ${url}:`, error.message);
31
+ throw error;
32
+ }
33
+ }
34
+ /**
35
+ * Extract text from PDF file
36
+ */
37
+ async extractFromFile(filePath, options = {}) {
38
+ try {
39
+ if (!fs.existsSync(filePath)) {
40
+ throw new Error(`PDF file not found: ${filePath}`);
41
+ }
42
+ logDebug(`Extracting text from PDF file: ${filePath}`);
43
+ const dataBuffer = fs.readFileSync(filePath);
44
+ return await this.extractFromBuffer(dataBuffer, options);
45
+ }
46
+ catch (error) {
47
+ logWarn(`Error extracting PDF from file ${filePath}:`, error.message);
48
+ throw error;
49
+ }
50
+ }
51
+ /**
52
+ * Extract text from PDF buffer
53
+ */
54
+ async extractFromBuffer(buffer, options = {}) {
55
+ try {
56
+ const pdfOptions = {};
57
+ if (options.maxPages) {
58
+ pdfOptions.max = options.maxPages;
59
+ }
60
+ const data = await pdf(buffer, pdfOptions);
61
+ let text = data.text;
62
+ if (options.cleanText !== false) {
63
+ text = this.cleanText(text);
64
+ }
65
+ logDebug(`Extracted ${data.numpages} pages, ${text.length} characters`);
66
+ return {
67
+ text,
68
+ numPages: data.numpages,
69
+ info: data.info,
70
+ metadata: data.metadata
71
+ };
72
+ }
73
+ catch (error) {
74
+ logWarn('Error parsing PDF:', error.message);
75
+ throw error;
76
+ }
77
+ }
78
+ /**
79
+ * Clean extracted text
80
+ */
81
+ cleanText(text) {
82
+ return text
83
+ // Remove excessive whitespace
84
+ .replace(/\s+/g, ' ')
85
+ // Remove page numbers (common patterns)
86
+ .replace(/\n\s*\d+\s*\n/g, '\n')
87
+ // Remove headers/footers (lines with only numbers or short text)
88
+ .replace(/\n\s*[\w\s]{1,30}\s*\n/g, '\n')
89
+ // Normalize line breaks
90
+ .replace(/\n{3,}/g, '\n\n')
91
+ // Trim
92
+ .trim();
93
+ }
94
+ /**
95
+ * Download PDF and save to file
96
+ */
97
+ async downloadPdf(url, savePath) {
98
+ try {
99
+ logDebug(`Downloading PDF from ${url} to ${savePath}`);
100
+ // Ensure directory exists
101
+ const dir = path.dirname(savePath);
102
+ if (!fs.existsSync(dir)) {
103
+ fs.mkdirSync(dir, { recursive: true });
104
+ }
105
+ const response = await axios.get(url, {
106
+ responseType: 'stream',
107
+ timeout: TIMEOUTS.DOWNLOAD,
108
+ headers: {
109
+ 'User-Agent': USER_AGENT,
110
+ 'Accept': 'application/pdf'
111
+ }
112
+ });
113
+ const writer = fs.createWriteStream(savePath);
114
+ response.data.pipe(writer);
115
+ return new Promise((resolve, reject) => {
116
+ writer.on('finish', () => {
117
+ logDebug(`PDF saved to: ${savePath}`);
118
+ resolve(savePath);
119
+ });
120
+ writer.on('error', reject);
121
+ });
122
+ }
123
+ catch (error) {
124
+ logWarn(`Error downloading PDF:`, error.message);
125
+ throw error;
126
+ }
127
+ }
128
+ }
129
+ export default PDFExtractor;
130
+ //# sourceMappingURL=PDFExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PDFExtractor.js","sourceRoot":"","sources":["../../../src/infrastructure/pdf/PDFExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface PdfDownloadOptions {
2
+ headers?: Record<string, string>;
3
+ }
4
+ export declare function safeFilename(value: string, fallback?: string): string;
5
+ export declare function isPdfBuffer(buffer: Buffer, contentType?: string): boolean;
6
+ export declare function downloadPdfFromUrl(pdfUrl: string, savePath: string, filenameHint: string, options?: PdfDownloadOptions): Promise<string>;
7
+ //# sourceMappingURL=PdfDownload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PdfDownload.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/pdf/PdfDownload.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAU,GAAG,MAAM,CAGtE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,OAAO,CAErE;AAyCD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA2IjB"}