@j0hanz/superfetch 1.1.2 → 1.1.3

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 (205) hide show
  1. package/README.md +52 -30
  2. package/dist/config/formatting.d.ts +9 -0
  3. package/dist/config/formatting.d.ts.map +1 -0
  4. package/dist/config/formatting.js +11 -0
  5. package/dist/config/formatting.js.map +1 -0
  6. package/dist/config/index.d.ts +11 -2
  7. package/dist/config/index.d.ts.map +1 -1
  8. package/dist/config/index.js +35 -13
  9. package/dist/config/index.js.map +1 -1
  10. package/dist/config/types/content.d.ts +107 -0
  11. package/dist/config/types/content.d.ts.map +1 -0
  12. package/dist/config/types/content.js +2 -0
  13. package/dist/config/types/content.js.map +1 -0
  14. package/dist/config/types/runtime.d.ts +78 -0
  15. package/dist/config/types/runtime.d.ts.map +1 -0
  16. package/dist/config/types/runtime.js +2 -0
  17. package/dist/config/types/runtime.js.map +1 -0
  18. package/dist/config/types/tools.d.ts +99 -0
  19. package/dist/config/types/tools.d.ts.map +1 -0
  20. package/dist/config/types/tools.js +2 -0
  21. package/dist/config/types/tools.js.map +1 -0
  22. package/dist/config/types.d.ts +3 -297
  23. package/dist/config/types.d.ts.map +1 -1
  24. package/dist/http/auth.d.ts +3 -0
  25. package/dist/http/auth.d.ts.map +1 -0
  26. package/dist/http/auth.js +34 -0
  27. package/dist/http/auth.js.map +1 -0
  28. package/dist/http/cors.d.ts +8 -0
  29. package/dist/http/cors.d.ts.map +1 -0
  30. package/dist/http/cors.js +47 -0
  31. package/dist/http/cors.js.map +1 -0
  32. package/dist/http/mcp-routes.d.ts +5 -0
  33. package/dist/http/mcp-routes.d.ts.map +1 -0
  34. package/dist/http/mcp-routes.js +110 -0
  35. package/dist/http/mcp-routes.js.map +1 -0
  36. package/dist/http/mcp-session.d.ts +12 -0
  37. package/dist/http/mcp-session.d.ts.map +1 -0
  38. package/dist/http/mcp-session.js +209 -0
  39. package/dist/http/mcp-session.js.map +1 -0
  40. package/dist/http/mcp-validation.d.ts +3 -0
  41. package/dist/http/mcp-validation.d.ts.map +1 -0
  42. package/dist/http/mcp-validation.js +34 -0
  43. package/dist/http/mcp-validation.js.map +1 -0
  44. package/dist/http/rate-limit.d.ts +13 -0
  45. package/dist/http/rate-limit.d.ts.map +1 -0
  46. package/dist/http/rate-limit.js +91 -0
  47. package/dist/http/rate-limit.js.map +1 -0
  48. package/dist/http/server.d.ts +4 -0
  49. package/dist/http/server.d.ts.map +1 -0
  50. package/dist/http/server.js +183 -0
  51. package/dist/http/server.js.map +1 -0
  52. package/dist/http/sessions.d.ts +15 -0
  53. package/dist/http/sessions.d.ts.map +1 -0
  54. package/dist/http/sessions.js +64 -0
  55. package/dist/http/sessions.js.map +1 -0
  56. package/dist/index.js +26 -341
  57. package/dist/index.js.map +1 -1
  58. package/dist/middleware/error-handler.d.ts +2 -2
  59. package/dist/middleware/error-handler.d.ts.map +1 -1
  60. package/dist/middleware/error-handler.js +46 -15
  61. package/dist/middleware/error-handler.js.map +1 -1
  62. package/dist/resources/cached-content.d.ts.map +1 -1
  63. package/dist/resources/cached-content.js +104 -44
  64. package/dist/resources/cached-content.js.map +1 -1
  65. package/dist/resources/index.d.ts.map +1 -1
  66. package/dist/resources/index.js +77 -69
  67. package/dist/resources/index.js.map +1 -1
  68. package/dist/server.d.ts.map +1 -1
  69. package/dist/server.js +9 -3
  70. package/dist/server.js.map +1 -1
  71. package/dist/services/cache.d.ts +13 -1
  72. package/dist/services/cache.d.ts.map +1 -1
  73. package/dist/services/cache.js +89 -16
  74. package/dist/services/cache.js.map +1 -1
  75. package/dist/services/context.d.ts +1 -1
  76. package/dist/services/context.d.ts.map +1 -1
  77. package/dist/services/context.js +1 -1
  78. package/dist/services/context.js.map +1 -1
  79. package/dist/services/extractor.d.ts.map +1 -1
  80. package/dist/services/extractor.js +122 -87
  81. package/dist/services/extractor.js.map +1 -1
  82. package/dist/services/fetcher/agents.d.ts +4 -0
  83. package/dist/services/fetcher/agents.d.ts.map +1 -0
  84. package/dist/services/fetcher/agents.js +111 -0
  85. package/dist/services/fetcher/agents.js.map +1 -0
  86. package/dist/services/fetcher/errors.d.ts +5 -0
  87. package/dist/services/fetcher/errors.d.ts.map +1 -0
  88. package/dist/services/fetcher/errors.js +71 -0
  89. package/dist/services/fetcher/errors.js.map +1 -0
  90. package/dist/services/fetcher/headers.d.ts +2 -0
  91. package/dist/services/fetcher/headers.d.ts.map +1 -0
  92. package/dist/services/fetcher/headers.js +28 -0
  93. package/dist/services/fetcher/headers.js.map +1 -0
  94. package/dist/services/fetcher/interceptors.d.ts +10 -0
  95. package/dist/services/fetcher/interceptors.d.ts.map +1 -0
  96. package/dist/services/fetcher/interceptors.js +82 -0
  97. package/dist/services/fetcher/interceptors.js.map +1 -0
  98. package/dist/services/fetcher/redirects.d.ts +6 -0
  99. package/dist/services/fetcher/redirects.d.ts.map +1 -0
  100. package/dist/services/fetcher/redirects.js +67 -0
  101. package/dist/services/fetcher/redirects.js.map +1 -0
  102. package/dist/services/fetcher/response.d.ts +5 -0
  103. package/dist/services/fetcher/response.d.ts.map +1 -0
  104. package/dist/services/fetcher/response.js +39 -0
  105. package/dist/services/fetcher/response.js.map +1 -0
  106. package/dist/services/fetcher/retry-policy.d.ts +28 -0
  107. package/dist/services/fetcher/retry-policy.d.ts.map +1 -0
  108. package/dist/services/fetcher/retry-policy.js +138 -0
  109. package/dist/services/fetcher/retry-policy.js.map +1 -0
  110. package/dist/services/fetcher.d.ts +2 -1
  111. package/dist/services/fetcher.d.ts.map +1 -1
  112. package/dist/services/fetcher.js +62 -315
  113. package/dist/services/fetcher.js.map +1 -1
  114. package/dist/services/logger.js +4 -4
  115. package/dist/services/logger.js.map +1 -1
  116. package/dist/services/parser.d.ts +1 -0
  117. package/dist/services/parser.d.ts.map +1 -1
  118. package/dist/services/parser.js +55 -35
  119. package/dist/services/parser.js.map +1 -1
  120. package/dist/tools/handlers/fetch-links/link-extractor.d.ts +4 -0
  121. package/dist/tools/handlers/fetch-links/link-extractor.d.ts.map +1 -0
  122. package/dist/tools/handlers/fetch-links/link-extractor.js +163 -0
  123. package/dist/tools/handlers/fetch-links/link-extractor.js.map +1 -0
  124. package/dist/tools/handlers/fetch-links.tool.d.ts.map +1 -1
  125. package/dist/tools/handlers/fetch-links.tool.js +78 -116
  126. package/dist/tools/handlers/fetch-links.tool.js.map +1 -1
  127. package/dist/tools/handlers/fetch-markdown.tool.d.ts +3 -13
  128. package/dist/tools/handlers/fetch-markdown.tool.d.ts.map +1 -1
  129. package/dist/tools/handlers/fetch-markdown.tool.js +74 -83
  130. package/dist/tools/handlers/fetch-markdown.tool.js.map +1 -1
  131. package/dist/tools/handlers/fetch-single.shared.d.ts +26 -0
  132. package/dist/tools/handlers/fetch-single.shared.d.ts.map +1 -0
  133. package/dist/tools/handlers/fetch-single.shared.js +49 -0
  134. package/dist/tools/handlers/fetch-single.shared.js.map +1 -0
  135. package/dist/tools/handlers/fetch-url.tool.d.ts.map +1 -1
  136. package/dist/tools/handlers/fetch-url.tool.js +82 -54
  137. package/dist/tools/handlers/fetch-url.tool.js.map +1 -1
  138. package/dist/tools/handlers/fetch-urls/processor.d.ts +13 -0
  139. package/dist/tools/handlers/fetch-urls/processor.d.ts.map +1 -0
  140. package/dist/tools/handlers/fetch-urls/processor.js +153 -0
  141. package/dist/tools/handlers/fetch-urls/processor.js.map +1 -0
  142. package/dist/tools/handlers/fetch-urls/response.d.ts +3 -0
  143. package/dist/tools/handlers/fetch-urls/response.d.ts.map +1 -0
  144. package/dist/tools/handlers/fetch-urls/response.js +58 -0
  145. package/dist/tools/handlers/fetch-urls/response.js.map +1 -0
  146. package/dist/tools/handlers/fetch-urls/validation.d.ts +6 -0
  147. package/dist/tools/handlers/fetch-urls/validation.d.ts.map +1 -0
  148. package/dist/tools/handlers/fetch-urls/validation.js +18 -0
  149. package/dist/tools/handlers/fetch-urls/validation.js.map +1 -0
  150. package/dist/tools/handlers/fetch-urls.tool.d.ts.map +1 -1
  151. package/dist/tools/handlers/fetch-urls.tool.js +104 -202
  152. package/dist/tools/handlers/fetch-urls.tool.js.map +1 -1
  153. package/dist/tools/index.d.ts.map +1 -1
  154. package/dist/tools/index.js +36 -237
  155. package/dist/tools/index.js.map +1 -1
  156. package/dist/tools/schemas.d.ts +357 -0
  157. package/dist/tools/schemas.d.ts.map +1 -0
  158. package/dist/tools/schemas.js +272 -0
  159. package/dist/tools/schemas.js.map +1 -0
  160. package/dist/tools/utils/cache-vary.d.ts +3 -0
  161. package/dist/tools/utils/cache-vary.d.ts.map +1 -0
  162. package/dist/tools/utils/cache-vary.js +44 -0
  163. package/dist/tools/utils/cache-vary.js.map +1 -0
  164. package/dist/tools/utils/common.d.ts +2 -2
  165. package/dist/tools/utils/common.d.ts.map +1 -1
  166. package/dist/tools/utils/common.js +5 -1
  167. package/dist/tools/utils/common.js.map +1 -1
  168. package/dist/tools/utils/content-transform.d.ts +16 -0
  169. package/dist/tools/utils/content-transform.d.ts.map +1 -0
  170. package/dist/tools/utils/content-transform.js +49 -0
  171. package/dist/tools/utils/content-transform.js.map +1 -0
  172. package/dist/tools/utils/fetch-pipeline.d.ts.map +1 -1
  173. package/dist/tools/utils/fetch-pipeline.js +32 -18
  174. package/dist/tools/utils/fetch-pipeline.js.map +1 -1
  175. package/dist/tools/utils/inline-content.d.ts +11 -0
  176. package/dist/tools/utils/inline-content.d.ts.map +1 -0
  177. package/dist/tools/utils/inline-content.js +39 -0
  178. package/dist/tools/utils/inline-content.js.map +1 -0
  179. package/dist/tools/utils/markdown-toc.d.ts +3 -0
  180. package/dist/tools/utils/markdown-toc.d.ts.map +1 -0
  181. package/dist/tools/utils/markdown-toc.js +35 -0
  182. package/dist/tools/utils/markdown-toc.js.map +1 -0
  183. package/dist/tools/utils/tool-response.d.ts +9 -0
  184. package/dist/tools/utils/tool-response.d.ts.map +1 -0
  185. package/dist/tools/utils/tool-response.js +19 -0
  186. package/dist/tools/utils/tool-response.js.map +1 -0
  187. package/dist/transformers/jsonl.transformer.d.ts.map +1 -1
  188. package/dist/transformers/jsonl.transformer.js +51 -28
  189. package/dist/transformers/jsonl.transformer.js.map +1 -1
  190. package/dist/transformers/markdown.transformer.d.ts.map +1 -1
  191. package/dist/transformers/markdown.transformer.js +82 -111
  192. package/dist/transformers/markdown.transformer.js.map +1 -1
  193. package/dist/utils/header-normalizer.d.ts +5 -0
  194. package/dist/utils/header-normalizer.d.ts.map +1 -0
  195. package/dist/utils/header-normalizer.js +25 -0
  196. package/dist/utils/header-normalizer.js.map +1 -0
  197. package/dist/utils/tool-error-handler.d.ts +1 -0
  198. package/dist/utils/tool-error-handler.d.ts.map +1 -1
  199. package/dist/utils/tool-error-handler.js +29 -1
  200. package/dist/utils/tool-error-handler.js.map +1 -1
  201. package/dist/utils/url-validator.d.ts +0 -3
  202. package/dist/utils/url-validator.d.ts.map +1 -1
  203. package/dist/utils/url-validator.js +98 -18
  204. package/dist/utils/url-validator.js.map +1 -1
  205. package/package.json +11 -6
@@ -0,0 +1,272 @@
1
+ import { z } from 'zod';
2
+ const requestOptionsSchema = z.object({
3
+ customHeaders: z
4
+ .record(z.string())
5
+ .optional()
6
+ .describe('Custom HTTP headers for the request'),
7
+ timeout: z
8
+ .number()
9
+ .min(1000)
10
+ .max(60000)
11
+ .optional()
12
+ .describe('Request timeout in milliseconds (1000-60000)'),
13
+ retries: z
14
+ .number()
15
+ .min(1)
16
+ .max(10)
17
+ .optional()
18
+ .describe('Number of retry attempts (1-10)'),
19
+ });
20
+ const linkEntrySchema = z
21
+ .object({
22
+ href: z.string().describe('The link URL'),
23
+ text: z.string().describe('The link anchor text'),
24
+ type: z.enum(['internal', 'external', 'image']).describe('Link type'),
25
+ })
26
+ .strict();
27
+ const batchResultSchema = z
28
+ .object({
29
+ url: z.string().describe('The fetched URL'),
30
+ success: z.boolean().describe('Whether the fetch was successful'),
31
+ title: z.string().optional().describe('Page title'),
32
+ content: z.string().optional().describe('The extracted content'),
33
+ contentSize: z.number().optional().describe('Content length in characters'),
34
+ resourceUri: z
35
+ .string()
36
+ .optional()
37
+ .describe('Resource URI when content is too large to inline'),
38
+ resourceMimeType: z
39
+ .string()
40
+ .optional()
41
+ .describe('MIME type for the resource URI'),
42
+ contentBlocks: z
43
+ .number()
44
+ .optional()
45
+ .describe('Number of content blocks (JSONL only)'),
46
+ cached: z.boolean().optional().describe('Whether served from cache'),
47
+ truncated: z.boolean().optional().describe('Whether content was truncated'),
48
+ error: z.string().optional().describe('Error message if failed'),
49
+ errorCode: z.string().optional().describe('Error code if failed'),
50
+ })
51
+ .strict();
52
+ export const fetchUrlInputSchema = requestOptionsSchema
53
+ .extend({
54
+ url: z.string().min(1).describe('The URL to fetch'),
55
+ extractMainContent: z
56
+ .boolean()
57
+ .default(true)
58
+ .describe('Use Readability to extract main article content'),
59
+ includeMetadata: z
60
+ .boolean()
61
+ .default(true)
62
+ .describe('Include page metadata (title, description, etc.)'),
63
+ maxContentLength: z
64
+ .number()
65
+ .positive()
66
+ .optional()
67
+ .describe('Maximum content length in characters'),
68
+ format: z
69
+ .enum(['jsonl', 'markdown'])
70
+ .default('jsonl')
71
+ .describe('Output format'),
72
+ })
73
+ .strict();
74
+ export const fetchLinksInputSchema = requestOptionsSchema
75
+ .extend({
76
+ url: z.string().min(1).describe('The URL to extract links from'),
77
+ includeExternal: z
78
+ .boolean()
79
+ .default(true)
80
+ .describe('Include external links'),
81
+ includeInternal: z
82
+ .boolean()
83
+ .default(true)
84
+ .describe('Include internal links'),
85
+ maxLinks: z
86
+ .number()
87
+ .positive()
88
+ .max(1000)
89
+ .optional()
90
+ .describe('Maximum number of links to return (1-1000)'),
91
+ filterPattern: z
92
+ .string()
93
+ .optional()
94
+ .describe('Regex pattern to filter links (matches against href)'),
95
+ includeImages: z
96
+ .boolean()
97
+ .default(false)
98
+ .describe('Include image links (img src attributes)'),
99
+ })
100
+ .strict();
101
+ export const fetchMarkdownInputSchema = requestOptionsSchema
102
+ .extend({
103
+ url: z.string().min(1).describe('The URL to fetch'),
104
+ extractMainContent: z
105
+ .boolean()
106
+ .default(true)
107
+ .describe('Extract main article content using Readability'),
108
+ includeMetadata: z
109
+ .boolean()
110
+ .default(true)
111
+ .describe('Include YAML frontmatter metadata'),
112
+ maxContentLength: z
113
+ .number()
114
+ .positive()
115
+ .optional()
116
+ .describe('Maximum content length in characters'),
117
+ })
118
+ .strict();
119
+ export const fetchUrlsInputSchema = requestOptionsSchema
120
+ .extend({
121
+ urls: z
122
+ .array(z.string().min(1))
123
+ .min(1)
124
+ .max(10)
125
+ .describe('Array of URLs to fetch (1-10 URLs)'),
126
+ extractMainContent: z
127
+ .boolean()
128
+ .default(true)
129
+ .describe('Use Readability to extract main article content'),
130
+ includeMetadata: z
131
+ .boolean()
132
+ .default(true)
133
+ .describe('Include page metadata (title, description, etc.)'),
134
+ maxContentLength: z
135
+ .number()
136
+ .positive()
137
+ .optional()
138
+ .describe('Maximum content length per URL in characters'),
139
+ format: z
140
+ .enum(['jsonl', 'markdown'])
141
+ .default('jsonl')
142
+ .describe('Output format for all URLs'),
143
+ concurrency: z
144
+ .number()
145
+ .min(1)
146
+ .max(5)
147
+ .default(3)
148
+ .describe('Maximum concurrent requests (1-5)'),
149
+ continueOnError: z
150
+ .boolean()
151
+ .default(true)
152
+ .describe('Continue processing if some URLs fail'),
153
+ })
154
+ .strict();
155
+ export const fetchUrlOutputSchema = z
156
+ .object({
157
+ url: z.string().describe('The fetched URL'),
158
+ title: z.string().optional().describe('Page title'),
159
+ contentBlocks: z
160
+ .number()
161
+ .describe('Number of content blocks extracted (JSONL only)'),
162
+ fetchedAt: z
163
+ .string()
164
+ .describe('ISO timestamp of when the content was fetched'),
165
+ format: z.enum(['jsonl', 'markdown']).describe('Output format used'),
166
+ content: z
167
+ .string()
168
+ .optional()
169
+ .describe('The extracted content in JSONL or Markdown format'),
170
+ contentSize: z.number().optional().describe('Content length in characters'),
171
+ resourceUri: z
172
+ .string()
173
+ .optional()
174
+ .describe('Resource URI when content is too large to inline'),
175
+ resourceMimeType: z
176
+ .string()
177
+ .optional()
178
+ .describe('MIME type for the resource URI'),
179
+ cached: z.boolean().describe('Whether the result was served from cache'),
180
+ truncated: z
181
+ .boolean()
182
+ .optional()
183
+ .describe('Whether content was truncated by maxContentLength'),
184
+ error: z
185
+ .string()
186
+ .optional()
187
+ .describe('Error message if the request failed'),
188
+ errorCode: z
189
+ .string()
190
+ .optional()
191
+ .describe('Error code if the request failed'),
192
+ })
193
+ .strict();
194
+ export const fetchLinksOutputSchema = z
195
+ .object({
196
+ url: z.string().describe('The source URL'),
197
+ linkCount: z.number().describe('Total number of links extracted'),
198
+ links: z.array(linkEntrySchema).describe('Array of extracted links'),
199
+ filtered: z
200
+ .number()
201
+ .optional()
202
+ .describe('Number of links filtered out by pattern'),
203
+ truncated: z
204
+ .boolean()
205
+ .optional()
206
+ .describe('Whether results were truncated by maxLinks'),
207
+ error: z
208
+ .string()
209
+ .optional()
210
+ .describe('Error message if the request failed'),
211
+ errorCode: z
212
+ .string()
213
+ .optional()
214
+ .describe('Error code if the request failed'),
215
+ })
216
+ .strict();
217
+ export const fetchMarkdownOutputSchema = z
218
+ .object({
219
+ url: z.string().describe('The fetched URL'),
220
+ title: z.string().optional().describe('Page title'),
221
+ fetchedAt: z
222
+ .string()
223
+ .describe('ISO timestamp of when the content was fetched'),
224
+ markdown: z
225
+ .string()
226
+ .optional()
227
+ .describe('The extracted content in Markdown format'),
228
+ contentSize: z.number().optional().describe('Content length in characters'),
229
+ resourceUri: z
230
+ .string()
231
+ .optional()
232
+ .describe('Resource URI when content is too large to inline'),
233
+ resourceMimeType: z
234
+ .string()
235
+ .optional()
236
+ .describe('MIME type for the resource URI'),
237
+ cached: z.boolean().describe('Whether the result was served from cache'),
238
+ truncated: z
239
+ .boolean()
240
+ .optional()
241
+ .describe('Whether content was truncated by maxContentLength'),
242
+ error: z
243
+ .string()
244
+ .optional()
245
+ .describe('Error message if the request failed'),
246
+ errorCode: z
247
+ .string()
248
+ .optional()
249
+ .describe('Error code if the request failed'),
250
+ })
251
+ .strict();
252
+ export const fetchUrlsOutputSchema = z
253
+ .object({
254
+ results: z
255
+ .array(batchResultSchema)
256
+ .describe('Array of results for each URL'),
257
+ summary: z
258
+ .object({
259
+ total: z.number().describe('Total URLs processed'),
260
+ successful: z.number().describe('Number of successful fetches'),
261
+ failed: z.number().describe('Number of failed fetches'),
262
+ cached: z.number().describe('Number served from cache'),
263
+ totalContentBlocks: z
264
+ .number()
265
+ .describe('Total content blocks extracted'),
266
+ })
267
+ .strict()
268
+ .describe('Summary statistics'),
269
+ fetchedAt: z.string().describe('ISO timestamp of batch completion'),
270
+ })
271
+ .strict();
272
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function normalizeHeadersForCache(headers?: Record<string, string>): Record<string, string> | undefined;
2
+ export declare function appendHeaderVary(cacheVary: Record<string, unknown> | string | undefined, customHeaders?: Record<string, string>): Record<string, unknown> | string | undefined;
3
+ //# sourceMappingURL=cache-vary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-vary.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/cache-vary.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAWpC;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,EACvD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAW9C"}
@@ -0,0 +1,44 @@
1
+ import { config } from '../../config/index.js';
2
+ export function normalizeHeadersForCache(headers) {
3
+ if (!headers || Object.keys(headers).length === 0)
4
+ return undefined;
5
+ const normalized = buildNormalizedHeaders(headers, config.security.blockedHeaders);
6
+ const iterator = normalized.keys();
7
+ if (iterator.next().done)
8
+ return undefined;
9
+ return Object.fromEntries(normalized.entries());
10
+ }
11
+ export function appendHeaderVary(cacheVary, customHeaders) {
12
+ const headerVary = normalizeHeadersForCache(customHeaders);
13
+ if (!cacheVary && !headerVary)
14
+ return undefined;
15
+ if (typeof cacheVary === 'string') {
16
+ return buildStringVary(cacheVary, headerVary);
17
+ }
18
+ if (!headerVary)
19
+ return cacheVary;
20
+ return { ...(cacheVary ?? {}), headers: headerVary };
21
+ }
22
+ function buildNormalizedHeaders(headers, blockedHeaders) {
23
+ const normalized = new Headers();
24
+ for (const [key, value] of Object.entries(headers)) {
25
+ if (blockedHeaders.has(key.toLowerCase()))
26
+ continue;
27
+ setHeaderValue(normalized, key, value);
28
+ }
29
+ return normalized;
30
+ }
31
+ function setHeaderValue(headers, key, value) {
32
+ try {
33
+ headers.set(key, value.trim());
34
+ }
35
+ catch {
36
+ // Ignore invalid headers for cache keys
37
+ }
38
+ }
39
+ function buildStringVary(key, headerVary) {
40
+ if (!headerVary)
41
+ return { key };
42
+ return { key, headers: headerVary };
43
+ }
44
+ //# sourceMappingURL=cache-vary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-vary.js","sourceRoot":"","sources":["../../../src/tools/utils/cache-vary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,UAAU,wBAAwB,CACtC,OAAgC;IAEhC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAEpE,MAAM,UAAU,GAAG,sBAAsB,CACvC,OAAO,EACP,MAAM,CAAC,QAAQ,CAAC,cAAc,CAC/B,CAAC;IACF,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE3C,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,SAAuD,EACvD,aAAsC;IAEtC,MAAM,UAAU,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;IAE3D,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAEhD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAA+B,EAC/B,cAA2B;IAE3B,MAAM,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QACpD,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB,EAAE,GAAW,EAAE,KAAa;IAClE,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,GAAW,EACX,UAA8C;IAE9C,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAChC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACtC,CAAC"}
@@ -1,7 +1,7 @@
1
- import type { ExtractedArticle, ExtractedMetadata, MetadataBlock, TruncationResult } from '../../config/types.js';
2
- import type { ContentTransformOptions } from '../../config/types.js';
1
+ import type { ContentTransformOptions, ExtractedArticle, ExtractedMetadata, MetadataBlock, TruncationResult } from '../../config/types.js';
3
2
  export type { ContentTransformOptions };
4
3
  export declare function determineContentExtractionSource(extractMainContent: boolean, article: ExtractedArticle | null): article is ExtractedArticle;
5
4
  export declare function createContentMetadataBlock(url: string, article: ExtractedArticle | null, extractedMeta: ExtractedMetadata, shouldExtractFromArticle: boolean, includeMetadata: boolean): MetadataBlock | undefined;
6
5
  export declare function enforceContentLengthLimit(content: string, maxLength?: number): TruncationResult;
6
+ export declare function truncateContent(content: string, maxLength?: number, suffix?: string): TruncationResult;
7
7
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,wBAAgB,gCAAgC,CAC9C,kBAAkB,EAAE,OAAO,EAC3B,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,OAAO,IAAI,gBAAgB,CAE7B;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,aAAa,EAAE,iBAAiB,EAChC,wBAAwB,EAAE,OAAO,EACjC,eAAe,EAAE,OAAO,GACvB,aAAa,GAAG,SAAS,CAmB3B;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,CAYlB"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,wBAAgB,gCAAgC,CAC9C,kBAAkB,EAAE,OAAO,EAC3B,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAC/B,OAAO,IAAI,gBAAgB,CAE7B;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,aAAa,EAAE,iBAAiB,EAChC,wBAAwB,EAAE,OAAO,EACjC,eAAe,EAAE,OAAO,GACvB,aAAa,GAAG,SAAS,CAmB3B;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,CAElB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,SAAoB,GACzB,gBAAgB,CAYlB"}
@@ -1,3 +1,4 @@
1
+ import { TRUNCATION_MARKER } from '../../config/formatting.js';
1
2
  export function determineContentExtractionSource(extractMainContent, article) {
2
3
  return extractMainContent && !!article;
3
4
  }
@@ -23,12 +24,15 @@ export function createContentMetadataBlock(url, article, extractedMeta, shouldEx
23
24
  };
24
25
  }
25
26
  export function enforceContentLengthLimit(content, maxLength) {
27
+ return truncateContent(content, maxLength);
28
+ }
29
+ export function truncateContent(content, maxLength, suffix = TRUNCATION_MARKER) {
26
30
  const shouldTruncate = maxLength !== undefined && maxLength > 0 && content.length > maxLength;
27
31
  if (!shouldTruncate) {
28
32
  return { content, truncated: false };
29
33
  }
30
34
  return {
31
- content: `${content.substring(0, maxLength)}\n...[truncated]`,
35
+ content: `${content.substring(0, maxLength)}${suffix}`,
32
36
  truncated: true,
33
37
  };
34
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,gCAAgC,CAC9C,kBAA2B,EAC3B,OAAgC;IAEhC,OAAO,kBAAkB,IAAI,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,GAAW,EACX,OAAgC,EAChC,aAAgC,EAChC,wBAAiC,EACjC,eAAwB;IAExB,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,wBAAwB,IAAI,OAAO;QACxC,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG;YACH,SAAS,EAAE,GAAG;SACf;QACH,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,GAAG;YACH,SAAS,EAAE,GAAG;SACf,CAAC;AACR,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,SAAkB;IAElB,MAAM,cAAc,GAClB,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAEzE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,kBAAkB;QAC7D,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/tools/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAW/D,MAAM,UAAU,gCAAgC,CAC9C,kBAA2B,EAC3B,OAAgC;IAEhC,OAAO,kBAAkB,IAAI,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,GAAW,EACX,OAAgC,EAChC,aAAgC,EAChC,wBAAiC,EACjC,eAAwB;IAExB,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,wBAAwB,IAAI,OAAO;QACxC,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG;YACH,SAAS,EAAE,GAAG;SACf;QACH,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,GAAG;YACH,SAAS,EAAE,GAAG;SACf,CAAC;AACR,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,SAAkB;IAElB,OAAO,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,SAAkB,EAClB,MAAM,GAAG,iBAAiB;IAE1B,MAAM,cAAc,GAClB,SAAS,KAAK,SAAS,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAEzE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACvC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE;QACtD,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { JsonlTransformResult, MarkdownTransformResult } from '../../config/types.js';
2
+ interface ExtractionOptions {
3
+ readonly extractMainContent: boolean;
4
+ readonly includeMetadata: boolean;
5
+ }
6
+ interface ContentLengthOptions {
7
+ readonly maxContentLength?: number;
8
+ }
9
+ interface MarkdownOptions extends ExtractionOptions, ContentLengthOptions {
10
+ readonly generateToc?: boolean;
11
+ }
12
+ export declare function transformHtmlToJsonl(html: string, url: string, options: ExtractionOptions & ContentLengthOptions): JsonlTransformResult;
13
+ export declare function transformHtmlToMarkdown(html: string, url: string, options: MarkdownOptions): MarkdownTransformResult;
14
+ export declare function transformHtmlToMarkdownWithBlocks(html: string, url: string, options: ExtractionOptions & ContentLengthOptions): JsonlTransformResult;
15
+ export {};
16
+ //# sourceMappingURL=content-transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-transform.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/content-transform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAc/B,UAAU,iBAAiB;IACzB,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AAQD,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,UAAU,eAAgB,SAAQ,iBAAiB,EAAE,oBAAoB;IACvE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AA6BD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,GAAG,oBAAoB,GAChD,oBAAoB,CAmBtB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,eAAe,GACvB,uBAAuB,CAmBzB;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,GAAG,oBAAoB,GAChD,oBAAoB,CAmBtB"}
@@ -0,0 +1,49 @@
1
+ import { TRUNCATION_MARKER } from '../../config/formatting.js';
2
+ import { extractContent } from '../../services/extractor.js';
3
+ import { parseHtml } from '../../services/parser.js';
4
+ import { toJsonl } from '../../transformers/jsonl.transformer.js';
5
+ import { htmlToMarkdown } from '../../transformers/markdown.transformer.js';
6
+ import { createContentMetadataBlock, determineContentExtractionSource, truncateContent, } from './common.js';
7
+ function resolveContentSource(html, url, options) {
8
+ const { article, metadata: extractedMeta } = extractContent(html, url, {
9
+ extractArticle: options.extractMainContent,
10
+ });
11
+ const shouldExtractFromArticle = determineContentExtractionSource(options.extractMainContent, article);
12
+ const sourceHtml = shouldExtractFromArticle ? article.content : html;
13
+ const metadata = createContentMetadataBlock(url, article, extractedMeta, shouldExtractFromArticle, options.includeMetadata);
14
+ const title = shouldExtractFromArticle ? article.title : extractedMeta.title;
15
+ return { sourceHtml, title, metadata };
16
+ }
17
+ export function transformHtmlToJsonl(html, url, options) {
18
+ const { sourceHtml, title, metadata } = resolveContentSource(html, url, options);
19
+ const contentBlocks = parseHtml(sourceHtml);
20
+ const { content, truncated } = truncateContent(toJsonl(contentBlocks, metadata), options.maxContentLength);
21
+ return {
22
+ content,
23
+ contentBlocks: contentBlocks.length,
24
+ title,
25
+ ...(truncated && { truncated }),
26
+ };
27
+ }
28
+ export function transformHtmlToMarkdown(html, url, options) {
29
+ const { sourceHtml, title, metadata } = resolveContentSource(html, url, options);
30
+ const markdown = htmlToMarkdown(sourceHtml, metadata);
31
+ const { content, truncated } = truncateContent(markdown, options.maxContentLength, TRUNCATION_MARKER);
32
+ return {
33
+ markdown: content,
34
+ title,
35
+ truncated,
36
+ };
37
+ }
38
+ export function transformHtmlToMarkdownWithBlocks(html, url, options) {
39
+ const { sourceHtml, title, metadata } = resolveContentSource(html, url, options);
40
+ const contentBlocks = parseHtml(sourceHtml);
41
+ const { content, truncated } = truncateContent(htmlToMarkdown(sourceHtml, metadata), options.maxContentLength, TRUNCATION_MARKER);
42
+ return {
43
+ content,
44
+ contentBlocks: contentBlocks.length,
45
+ title,
46
+ ...(truncated && { truncated }),
47
+ };
48
+ }
49
+ //# sourceMappingURL=content-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-transform.js","sourceRoot":"","sources":["../../../src/tools/utils/content-transform.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-pipeline.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/fetch-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACpB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAoD/B;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAiD5B"}
1
+ {"version":3,"file":"fetch-pipeline.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/fetch-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACpB,cAAc,EACf,MAAM,uBAAuB,CAAC;AAuD/B;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAwB5B"}
@@ -2,6 +2,7 @@ import * as cache from '../../services/cache.js';
2
2
  import { fetchUrlWithRetry } from '../../services/fetcher.js';
3
3
  import { logDebug, logWarn } from '../../services/logger.js';
4
4
  import { validateAndNormalizeUrl } from '../../utils/url-validator.js';
5
+ import { appendHeaderVary } from './cache-vary.js';
5
6
  function safeJsonParse(cached, cacheKey) {
6
7
  try {
7
8
  return JSON.parse(cached);
@@ -35,6 +36,7 @@ function attemptCacheRetrieval(cacheKey, deserialize, cacheNamespace, normalized
35
36
  fromCache: true,
36
37
  url: normalizedUrl,
37
38
  fetchedAt: cached.fetchedAt,
39
+ cacheKey,
38
40
  };
39
41
  }
40
42
  /**
@@ -46,30 +48,42 @@ function attemptCacheRetrieval(cacheKey, deserialize, cacheNamespace, normalized
46
48
  * @returns Promise resolving to the pipeline result
47
49
  */
48
50
  export async function executeFetchPipeline(options) {
49
- const { url, cacheNamespace, customHeaders, retries, signal, timeout, transform, serialize = JSON.stringify, deserialize, } = options;
50
- const normalizedUrl = validateAndNormalizeUrl(url);
51
- const cacheKey = cache.createCacheKey(cacheNamespace, normalizedUrl);
52
- const cachedResult = attemptCacheRetrieval(cacheKey, deserialize, cacheNamespace, normalizedUrl);
53
- if (cachedResult) {
51
+ const normalizedUrl = validateAndNormalizeUrl(options.url);
52
+ const cacheKey = resolveCacheKey(options, normalizedUrl);
53
+ const cachedResult = attemptCacheRetrieval(cacheKey, options.deserialize, options.cacheNamespace, normalizedUrl);
54
+ if (cachedResult)
54
55
  return cachedResult;
55
- }
56
- const fetchOptions = {
57
- customHeaders,
58
- signal,
59
- timeout,
56
+ const fetchOptions = buildFetchOptions(options);
57
+ logDebug('Fetching URL', { url: normalizedUrl, retries: options.retries });
58
+ const html = await fetchUrlWithRetry(normalizedUrl, fetchOptions, options.retries);
59
+ const data = options.transform(html, normalizedUrl);
60
+ persistCache(cacheKey, data, options.serialize);
61
+ return buildPipelineResult(normalizedUrl, data, cacheKey);
62
+ }
63
+ function resolveCacheKey(options, normalizedUrl) {
64
+ const cacheVary = appendHeaderVary(options.cacheVary, options.customHeaders);
65
+ return cache.createCacheKey(options.cacheNamespace, normalizedUrl, cacheVary);
66
+ }
67
+ function buildFetchOptions(options) {
68
+ return {
69
+ customHeaders: options.customHeaders,
70
+ signal: options.signal,
71
+ timeout: options.timeout,
60
72
  };
61
- logDebug('Fetching URL', { url: normalizedUrl, retries });
62
- const html = await fetchUrlWithRetry(normalizedUrl, fetchOptions, retries);
63
- const data = transform(html, normalizedUrl);
64
- if (cacheKey) {
65
- const serialized = serialize(data);
66
- cache.set(cacheKey, serialized);
67
- }
73
+ }
74
+ function persistCache(cacheKey, data, serialize) {
75
+ if (!cacheKey)
76
+ return;
77
+ const serializer = serialize ?? JSON.stringify;
78
+ cache.set(cacheKey, serializer(data));
79
+ }
80
+ function buildPipelineResult(url, data, cacheKey) {
68
81
  return {
69
82
  data,
70
83
  fromCache: false,
71
- url: normalizedUrl,
84
+ url,
72
85
  fetchedAt: new Date().toISOString(),
86
+ cacheKey,
73
87
  };
74
88
  }
75
89
  //# sourceMappingURL=fetch-pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-pipeline.js","sourceRoot":"","sources":["../../../src/tools/utils/fetch-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-pipeline.js","sourceRoot":"","sources":["../../../src/tools/utils/fetch-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type InlineContentFormat = 'jsonl' | 'markdown';
2
+ export interface InlineContentResult {
3
+ content?: string;
4
+ contentSize: number;
5
+ resourceUri?: string;
6
+ resourceMimeType?: string;
7
+ error?: string;
8
+ truncated?: boolean;
9
+ }
10
+ export declare function applyInlineContentLimit(content: string, cacheKey: string | null, format: InlineContentFormat): InlineContentResult;
11
+ //# sourceMappingURL=inline-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-content.d.ts","sourceRoot":"","sources":["../../../src/tools/utils/inline-content.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,UAAU,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,MAAM,EAAE,mBAAmB,GAC1B,mBAAmB,CAkBrB"}
@@ -0,0 +1,39 @@
1
+ import { TRUNCATION_MARKER } from '../../config/formatting.js';
2
+ import { config } from '../../config/index.js';
3
+ import * as cache from '../../services/cache.js';
4
+ export function applyInlineContentLimit(content, cacheKey, format) {
5
+ const contentSize = content.length;
6
+ const inlineLimit = config.constants.maxInlineContentChars;
7
+ if (contentSize <= inlineLimit) {
8
+ return { content, contentSize };
9
+ }
10
+ const resourceUri = resolveResourceUri(cacheKey);
11
+ if (!resourceUri) {
12
+ return buildTruncatedFallback(content, contentSize, inlineLimit);
13
+ }
14
+ return {
15
+ contentSize,
16
+ resourceUri,
17
+ resourceMimeType: resolveResourceMimeType(format),
18
+ };
19
+ }
20
+ function resolveResourceUri(cacheKey) {
21
+ if (!config.cache.enabled || !cacheKey)
22
+ return null;
23
+ return cache.toResourceUri(cacheKey);
24
+ }
25
+ function resolveResourceMimeType(format) {
26
+ return format === 'markdown' ? 'text/markdown' : 'application/jsonl';
27
+ }
28
+ function buildTruncatedFallback(content, contentSize, inlineLimit) {
29
+ const maxContentLength = Math.max(0, inlineLimit - TRUNCATION_MARKER.length);
30
+ const truncatedContent = content.length > inlineLimit
31
+ ? `${content.substring(0, maxContentLength)}${TRUNCATION_MARKER}`
32
+ : content;
33
+ return {
34
+ content: truncatedContent,
35
+ contentSize,
36
+ truncated: true,
37
+ };
38
+ }
39
+ //# sourceMappingURL=inline-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-content.js","sourceRoot":"","sources":["../../../src/tools/utils/inline-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,KAAK,KAAK,MAAM,yBAAyB,CAAC;AAajD,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,QAAuB,EACvB,MAA2B;IAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC;IAE3D,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,sBAAsB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,WAAW;QACX,WAAW;QACX,gBAAgB,EAAE,uBAAuB,CAAC,MAAM,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAuB;IACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA2B;IAC1D,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC;AACvE,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAe,EACf,WAAmB,EACnB,WAAmB;IAEnB,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,gBAAgB,GACpB,OAAO,CAAC,MAAM,GAAG,WAAW;QAC1B,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,iBAAiB,EAAE;QACjE,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,gBAAgB;QACzB,WAAW;QACX,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TocEntry } from '../../config/types.js';
2
+ export declare function extractToc(markdown: string): TocEntry[];
3
+ //# sourceMappingURL=markdown-toc.d.ts.map