@j0hanz/fetch-url-mcp 1.2.0 → 1.3.1

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 (184) hide show
  1. package/dist/cache.d.ts +9 -3
  2. package/dist/cache.d.ts.map +1 -0
  3. package/dist/cache.js +54 -119
  4. package/dist/cache.js.map +1 -0
  5. package/dist/cli.d.ts +1 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +7 -4
  8. package/dist/cli.js.map +1 -0
  9. package/dist/config.d.ts +2 -3
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +19 -27
  12. package/dist/config.js.map +1 -0
  13. package/dist/crypto.d.ts +1 -0
  14. package/dist/crypto.d.ts.map +1 -0
  15. package/dist/crypto.js +7 -3
  16. package/dist/crypto.js.map +1 -0
  17. package/dist/dom-noise-removal.d.ts +2 -1
  18. package/dist/dom-noise-removal.d.ts.map +1 -0
  19. package/dist/dom-noise-removal.js +9 -6
  20. package/dist/dom-noise-removal.js.map +1 -0
  21. package/dist/download.d.ts +4 -0
  22. package/dist/download.d.ts.map +1 -0
  23. package/dist/download.js +106 -0
  24. package/dist/download.js.map +1 -0
  25. package/dist/errors.d.ts +1 -0
  26. package/dist/errors.d.ts.map +1 -0
  27. package/dist/errors.js +2 -1
  28. package/dist/errors.js.map +1 -0
  29. package/dist/examples/mcp-fetch-url-client.js +19 -3
  30. package/dist/examples/mcp-fetch-url-client.js.map +1 -1
  31. package/dist/fetch-content.d.ts +1 -0
  32. package/dist/fetch-content.d.ts.map +1 -0
  33. package/dist/fetch-content.js +15 -14
  34. package/dist/fetch-content.js.map +1 -0
  35. package/dist/fetch-stream.d.ts +1 -0
  36. package/dist/fetch-stream.d.ts.map +1 -0
  37. package/dist/fetch-stream.js +1 -0
  38. package/dist/fetch-stream.js.map +1 -0
  39. package/dist/fetch.d.ts +1 -0
  40. package/dist/fetch.d.ts.map +1 -0
  41. package/dist/fetch.js +123 -54
  42. package/dist/fetch.js.map +1 -0
  43. package/dist/host-normalization.d.ts +1 -0
  44. package/dist/host-normalization.d.ts.map +1 -0
  45. package/dist/host-normalization.js +22 -9
  46. package/dist/host-normalization.js.map +1 -0
  47. package/dist/http/auth.d.ts +51 -0
  48. package/dist/http/auth.d.ts.map +1 -0
  49. package/dist/http/auth.js +344 -0
  50. package/dist/http/auth.js.map +1 -0
  51. package/dist/http/health.d.ts +7 -0
  52. package/dist/http/health.d.ts.map +1 -0
  53. package/dist/http/health.js +156 -0
  54. package/dist/http/health.js.map +1 -0
  55. package/dist/http/helpers.d.ts +58 -0
  56. package/dist/http/helpers.d.ts.map +1 -0
  57. package/dist/http/helpers.js +370 -0
  58. package/dist/http/helpers.js.map +1 -0
  59. package/dist/{http-native.d.ts → http/native.d.ts} +1 -0
  60. package/dist/http/native.d.ts.map +1 -0
  61. package/dist/http/native.js +618 -0
  62. package/dist/http/native.js.map +1 -0
  63. package/dist/http/rate-limit.d.ts +13 -0
  64. package/dist/http/rate-limit.d.ts.map +1 -0
  65. package/dist/http/rate-limit.js +92 -0
  66. package/dist/http/rate-limit.js.map +1 -0
  67. package/dist/index.d.ts +1 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +20 -14
  70. package/dist/index.js.map +1 -0
  71. package/dist/instructions.d.ts +2 -0
  72. package/dist/instructions.d.ts.map +1 -0
  73. package/dist/instructions.js +41 -0
  74. package/dist/instructions.js.map +1 -0
  75. package/dist/ip-blocklist.d.ts +1 -0
  76. package/dist/ip-blocklist.d.ts.map +1 -0
  77. package/dist/ip-blocklist.js +13 -8
  78. package/dist/ip-blocklist.js.map +1 -0
  79. package/dist/json.d.ts +2 -1
  80. package/dist/json.d.ts.map +1 -0
  81. package/dist/json.js +16 -6
  82. package/dist/json.js.map +1 -0
  83. package/dist/language-detection.d.ts +1 -0
  84. package/dist/language-detection.d.ts.map +1 -0
  85. package/dist/language-detection.js +2 -7
  86. package/dist/language-detection.js.map +1 -0
  87. package/dist/markdown-cleanup.d.ts +2 -1
  88. package/dist/markdown-cleanup.d.ts.map +1 -0
  89. package/dist/markdown-cleanup.js +52 -54
  90. package/dist/markdown-cleanup.js.map +1 -0
  91. package/dist/mcp-validator.d.ts +1 -0
  92. package/dist/mcp-validator.d.ts.map +1 -0
  93. package/dist/mcp-validator.js +20 -18
  94. package/dist/mcp-validator.js.map +1 -0
  95. package/dist/mcp.d.ts +2 -2
  96. package/dist/mcp.d.ts.map +1 -0
  97. package/dist/mcp.js +35 -344
  98. package/dist/mcp.js.map +1 -0
  99. package/dist/observability.d.ts +2 -0
  100. package/dist/observability.d.ts.map +1 -0
  101. package/dist/observability.js +32 -6
  102. package/dist/observability.js.map +1 -0
  103. package/dist/prompts.d.ts +1 -0
  104. package/dist/prompts.d.ts.map +1 -0
  105. package/dist/prompts.js +15 -3
  106. package/dist/prompts.js.map +1 -0
  107. package/dist/resources.d.ts +1 -0
  108. package/dist/resources.d.ts.map +1 -0
  109. package/dist/resources.js +46 -25
  110. package/dist/resources.js.map +1 -0
  111. package/dist/server-tuning.d.ts +1 -0
  112. package/dist/server-tuning.d.ts.map +1 -0
  113. package/dist/server-tuning.js +14 -17
  114. package/dist/server-tuning.js.map +1 -0
  115. package/dist/server.d.ts +1 -0
  116. package/dist/server.d.ts.map +1 -0
  117. package/dist/server.js +29 -35
  118. package/dist/server.js.map +1 -0
  119. package/dist/session.d.ts +2 -0
  120. package/dist/session.d.ts.map +1 -0
  121. package/dist/session.js +58 -29
  122. package/dist/session.js.map +1 -0
  123. package/dist/tasks/execution.d.ts +42 -0
  124. package/dist/tasks/execution.d.ts.map +1 -0
  125. package/dist/tasks/execution.js +241 -0
  126. package/dist/tasks/execution.js.map +1 -0
  127. package/dist/{tasks.d.ts → tasks/manager.d.ts} +12 -0
  128. package/dist/tasks/manager.d.ts.map +1 -0
  129. package/dist/{tasks.js → tasks/manager.js} +95 -43
  130. package/dist/tasks/manager.js.map +1 -0
  131. package/dist/tasks/owner.d.ts +32 -0
  132. package/dist/tasks/owner.d.ts.map +1 -0
  133. package/dist/tasks/owner.js +92 -0
  134. package/dist/tasks/owner.js.map +1 -0
  135. package/dist/timer-utils.d.ts +1 -0
  136. package/dist/timer-utils.d.ts.map +1 -0
  137. package/dist/timer-utils.js +8 -4
  138. package/dist/timer-utils.js.map +1 -0
  139. package/dist/tool-errors.d.ts +12 -0
  140. package/dist/tool-errors.d.ts.map +1 -0
  141. package/dist/tool-errors.js +55 -0
  142. package/dist/tool-errors.js.map +1 -0
  143. package/dist/tool-pipeline.d.ts +72 -0
  144. package/dist/tool-pipeline.d.ts.map +1 -0
  145. package/dist/tool-pipeline.js +408 -0
  146. package/dist/tool-pipeline.js.map +1 -0
  147. package/dist/tool-progress.d.ts +32 -0
  148. package/dist/tool-progress.d.ts.map +1 -0
  149. package/dist/tool-progress.js +129 -0
  150. package/dist/tool-progress.js.map +1 -0
  151. package/dist/tools.d.ts +35 -111
  152. package/dist/tools.d.ts.map +1 -0
  153. package/dist/tools.js +150 -610
  154. package/dist/tools.js.map +1 -0
  155. package/dist/{transform.d.ts → transform/transform.d.ts} +2 -1
  156. package/dist/transform/transform.d.ts.map +1 -0
  157. package/dist/{transform.js → transform/transform.js} +81 -771
  158. package/dist/transform/transform.js.map +1 -0
  159. package/dist/{transform-types.d.ts → transform/types.d.ts} +2 -0
  160. package/dist/transform/types.d.ts.map +1 -0
  161. package/dist/{transform-types.js → transform/types.js} +1 -0
  162. package/dist/transform/types.js.map +1 -0
  163. package/dist/transform/worker-pool.d.ts +93 -0
  164. package/dist/transform/worker-pool.d.ts.map +1 -0
  165. package/dist/transform/worker-pool.js +757 -0
  166. package/dist/transform/worker-pool.js.map +1 -0
  167. package/dist/transform/workers/transform-child.d.ts +2 -0
  168. package/dist/transform/workers/transform-child.d.ts.map +1 -0
  169. package/dist/{workers → transform/workers}/transform-child.js +17 -13
  170. package/dist/transform/workers/transform-child.js.map +1 -0
  171. package/dist/transform/workers/transform-worker.d.ts +2 -0
  172. package/dist/transform/workers/transform-worker.d.ts.map +1 -0
  173. package/dist/{workers → transform/workers}/transform-worker.js +16 -13
  174. package/dist/transform/workers/transform-worker.js.map +1 -0
  175. package/dist/type-guards.d.ts +1 -0
  176. package/dist/type-guards.d.ts.map +1 -0
  177. package/dist/type-guards.js +4 -4
  178. package/dist/type-guards.js.map +1 -0
  179. package/package.json +6 -7
  180. package/dist/AGENTS.md +0 -152
  181. package/dist/http-native.js +0 -1320
  182. package/dist/instructions.md +0 -113
  183. package/dist/workers/transform-child.d.ts +0 -1
  184. package/dist/workers/transform-worker.d.ts +0 -1
@@ -1,10 +1,10 @@
1
+ import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
1
2
  import { AsyncLocalStorage } from 'node:async_hooks';
2
3
  import { Buffer } from 'node:buffer';
3
4
  import { randomUUID } from 'node:crypto';
4
5
  import { setInterval } from 'node:timers';
5
- import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
6
- import { config } from './config.js';
7
- import { createUnrefTimeout } from './timer-utils.js';
6
+ import { config } from '../config.js';
7
+ import { createUnrefTimeout } from '../timer-utils.js';
8
8
  const DEFAULT_TTL_MS = 60_000;
9
9
  const MIN_TTL_MS = 1_000;
10
10
  const MAX_TTL_MS = 86_400_000;
@@ -13,13 +13,14 @@ const DEFAULT_OWNER_KEY = 'default';
13
13
  const DEFAULT_PAGE_SIZE = 50;
14
14
  const CLEANUP_INTERVAL_MS = 60_000;
15
15
  const MAX_CURSOR_LENGTH = 256;
16
+ const RESULT_DELIVERY_GRACE_MS = 10_000;
16
17
  function isTerminalStatus(status) {
17
18
  return (status === 'completed' || status === 'failed' || status === 'cancelled');
18
19
  }
19
20
  function normalizeTaskTtl(ttl) {
20
21
  if (!Number.isFinite(ttl))
21
22
  return DEFAULT_TTL_MS;
22
- const rounded = Math.trunc(ttl ?? DEFAULT_TTL_MS);
23
+ const rounded = Math.trunc(Number(ttl));
23
24
  if (rounded < MIN_TTL_MS)
24
25
  return MIN_TTL_MS;
25
26
  if (rounded > MAX_TTL_MS)
@@ -28,6 +29,7 @@ function normalizeTaskTtl(ttl) {
28
29
  }
29
30
  class TaskManager {
30
31
  tasks = new Map();
32
+ ownerCounts = new Map();
31
33
  waiters = new Map();
32
34
  constructor() {
33
35
  this.startCleanupLoop();
@@ -40,19 +42,37 @@ class TaskManager {
40
42
  }
41
43
  removeExpiredTasks() {
42
44
  const now = Date.now();
45
+ const expired = [];
43
46
  for (const [id, task] of this.tasks) {
44
47
  if (this.isExpired(task, now)) {
45
- this.tasks.delete(id);
48
+ expired.push(id);
46
49
  }
47
50
  }
51
+ for (const id of expired) {
52
+ this.removeTask(id);
53
+ }
54
+ }
55
+ removeTask(taskId) {
56
+ const task = this.tasks.get(taskId);
57
+ if (!task)
58
+ return false;
59
+ this.tasks.delete(taskId);
60
+ this.decrementOwnerCount(task.ownerKey);
61
+ return true;
48
62
  }
49
63
  countTasksForOwner(ownerKey) {
50
- let count = 0;
51
- for (const task of this.tasks.values()) {
52
- if (task.ownerKey === ownerKey)
53
- count += 1;
64
+ return this.ownerCounts.get(ownerKey) ?? 0;
65
+ }
66
+ incrementOwnerCount(ownerKey) {
67
+ this.ownerCounts.set(ownerKey, (this.ownerCounts.get(ownerKey) ?? 0) + 1);
68
+ }
69
+ decrementOwnerCount(ownerKey) {
70
+ const previousCount = this.ownerCounts.get(ownerKey) ?? 0;
71
+ if (previousCount > 1) {
72
+ this.ownerCounts.set(ownerKey, previousCount - 1);
73
+ return;
54
74
  }
55
- return count;
75
+ this.ownerCounts.delete(ownerKey);
56
76
  }
57
77
  assertTaskCapacity(ownerKey) {
58
78
  const { maxPerOwner, maxTotal } = config.tasks;
@@ -81,6 +101,7 @@ class TaskManager {
81
101
  _createdAtMs: now.getTime(),
82
102
  };
83
103
  this.tasks.set(task.taskId, task);
104
+ this.incrementOwnerCount(ownerKey);
84
105
  return task;
85
106
  }
86
107
  getTask(taskId, ownerKey) {
@@ -90,7 +111,7 @@ class TaskManager {
90
111
  if (ownerKey && task.ownerKey !== ownerKey)
91
112
  return undefined;
92
113
  if (this.isExpired(task)) {
93
- this.tasks.delete(taskId);
114
+ this.removeTask(taskId);
94
115
  return undefined;
95
116
  }
96
117
  return task;
@@ -118,6 +139,7 @@ class TaskManager {
118
139
  status: 'cancelled',
119
140
  statusMessage: 'The task was cancelled by request.',
120
141
  });
142
+ this.decrementOwnerCount(task.ownerKey);
121
143
  return this.tasks.get(taskId);
122
144
  }
123
145
  cancelTasksByOwner(ownerKey, statusMessage = 'The task was cancelled because its owner is no longer active.') {
@@ -133,48 +155,63 @@ class TaskManager {
133
155
  status: 'cancelled',
134
156
  statusMessage,
135
157
  });
136
- const updated = this.tasks.get(task.taskId);
137
- if (updated)
138
- cancelled.push(updated);
158
+ this.decrementOwnerCount(task.ownerKey);
159
+ cancelled.push(task);
139
160
  }
140
161
  return cancelled;
141
162
  }
142
- collectPage(ownerKey, startIndex, pageSize) {
163
+ collectPage(ownerKey, anchorTaskId, pageSize) {
143
164
  const page = [];
144
- let currentIndex = 0;
165
+ let collecting = anchorTaskId === null;
166
+ let anchorFound = anchorTaskId === null;
145
167
  const now = Date.now();
168
+ const expired = [];
146
169
  for (const task of this.tasks.values()) {
147
170
  if (task.ownerKey !== ownerKey)
148
171
  continue;
149
172
  if (this.isExpired(task, now)) {
150
- this.tasks.delete(task.taskId);
173
+ expired.push(task.taskId);
151
174
  continue;
152
175
  }
153
- if (currentIndex >= startIndex) {
154
- page.push(task);
155
- if (page.length > pageSize) {
156
- break;
176
+ if (!collecting) {
177
+ if (task.taskId === anchorTaskId) {
178
+ anchorFound = true;
179
+ collecting = true;
157
180
  }
181
+ continue;
158
182
  }
159
- currentIndex++;
183
+ page.push(task);
184
+ if (page.length > pageSize)
185
+ break;
186
+ }
187
+ for (const id of expired) {
188
+ this.removeTask(id);
189
+ }
190
+ // Anchor task expired between pages; return empty list so callers stop
191
+ // pagination cleanly. Silently falling back to page 0 risks infinite loops
192
+ // for automated clients that always follow nextCursor.
193
+ if (!anchorFound) {
194
+ return [];
160
195
  }
161
196
  return page;
162
197
  }
163
198
  listTasks(options) {
164
199
  const { ownerKey, cursor, limit } = options;
165
200
  const pageSize = limit && limit > 0 ? limit : DEFAULT_PAGE_SIZE;
166
- const startIndex = cursor ? this.decodeCursor(cursor) : 0;
167
- if (startIndex === null) {
168
- throw new McpError(ErrorCode.InvalidParams, 'Invalid cursor');
201
+ let anchorTaskId = null;
202
+ if (cursor !== undefined) {
203
+ const decoded = this.decodeCursor(cursor);
204
+ if (decoded === null) {
205
+ throw new McpError(ErrorCode.InvalidParams, 'Invalid cursor');
206
+ }
207
+ ({ anchorTaskId } = decoded);
169
208
  }
170
- const page = this.collectPage(ownerKey, startIndex, pageSize);
209
+ const page = this.collectPage(ownerKey, anchorTaskId, pageSize);
171
210
  const hasMore = page.length > pageSize;
172
211
  if (hasMore) {
173
212
  page.pop();
174
213
  }
175
- const nextCursor = hasMore
176
- ? this.encodeCursor(startIndex + page.length)
177
- : undefined;
214
+ const nextCursor = this.resolveNextCursor(page, hasMore);
178
215
  return nextCursor ? { tasks: page, nextCursor } : { tasks: page };
179
216
  }
180
217
  async waitForTerminalTask(taskId, ownerKey, signal) {
@@ -184,17 +221,14 @@ class TaskManager {
184
221
  if (ownerKey && task.ownerKey !== ownerKey)
185
222
  return undefined;
186
223
  if (this.isExpired(task)) {
187
- this.tasks.delete(taskId);
224
+ this.removeTask(taskId);
188
225
  return undefined;
189
226
  }
190
227
  if (isTerminalStatus(task.status))
191
228
  return task;
229
+ // isExpired() above guarantees task.ttl has not elapsed; compute deadlineMs
230
+ // for the promise-based timeout below.
192
231
  const deadlineMs = task._createdAtMs + task.ttl;
193
- const now = Date.now();
194
- if (deadlineMs <= now) {
195
- this.tasks.delete(taskId);
196
- return undefined;
197
- }
198
232
  return new Promise((resolve, reject) => {
199
233
  const resolveInContext = AsyncLocalStorage.bind((value) => {
200
234
  resolve(value);
@@ -267,7 +301,7 @@ class TaskManager {
267
301
  settleOnce(() => {
268
302
  cleanup();
269
303
  removeWaiter();
270
- this.tasks.delete(taskId);
304
+ this.removeTask(taskId);
271
305
  resolveInContext(undefined);
272
306
  });
273
307
  })
@@ -287,25 +321,42 @@ class TaskManager {
287
321
  isExpired(task, now = Date.now()) {
288
322
  return now - task._createdAtMs > task.ttl;
289
323
  }
290
- encodeCursor(index) {
291
- return Buffer.from(String(index), 'utf8').toString('base64url');
324
+ shrinkTtlAfterDelivery(taskId) {
325
+ const task = this.tasks.get(taskId);
326
+ if (!task)
327
+ return;
328
+ if (!isTerminalStatus(task.status))
329
+ return;
330
+ const elapsed = Date.now() - task._createdAtMs;
331
+ const newTtl = elapsed + RESULT_DELIVERY_GRACE_MS;
332
+ if (newTtl < task.ttl) {
333
+ task.ttl = newTtl;
334
+ task.lastUpdatedAt = new Date().toISOString();
335
+ }
336
+ }
337
+ encodeCursor(taskId) {
338
+ return Buffer.from(taskId, 'utf8').toString('base64url');
292
339
  }
293
340
  decodeCursor(cursor) {
294
341
  try {
295
342
  if (!isValidBase64UrlCursor(cursor))
296
343
  return null;
297
344
  const decoded = Buffer.from(cursor, 'base64url').toString('utf8');
298
- if (!/^\d+$/u.test(decoded))
345
+ // Basic sanity: non-empty and plausible taskId length (UUIDs are 36 chars)
346
+ if (!decoded || decoded.length > 128)
299
347
  return null;
300
- const value = Number.parseInt(decoded, 10);
301
- if (!Number.isFinite(value) || value < 0)
302
- return null;
303
- return value;
348
+ return { anchorTaskId: decoded };
304
349
  }
305
350
  catch {
306
351
  return null;
307
352
  }
308
353
  }
354
+ resolveNextCursor(page, hasMore) {
355
+ if (!hasMore)
356
+ return undefined;
357
+ const lastTask = page.at(-1);
358
+ return lastTask ? this.encodeCursor(lastTask.taskId) : undefined;
359
+ }
309
360
  }
310
361
  function isValidBase64UrlCursor(cursor) {
311
362
  if (!cursor)
@@ -325,3 +376,4 @@ function isValidBase64UrlCursor(cursor) {
325
376
  return cursor.length % 4 !== 1;
326
377
  }
327
378
  export const taskManager = new TaskManager();
379
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/tasks/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { ServerResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { ProgressNotification } from '../tools.js';
3
+ export interface HandlerExtra {
4
+ sessionId?: string;
5
+ authInfo?: {
6
+ clientId?: string;
7
+ token?: string;
8
+ };
9
+ signal?: AbortSignal;
10
+ requestId?: string | number;
11
+ sendNotification?: (notification: ProgressNotification) => Promise<void>;
12
+ }
13
+ export interface ToolCallContext {
14
+ ownerKey: string;
15
+ signal?: AbortSignal;
16
+ requestId?: string | number;
17
+ sendNotification?: (notification: ProgressNotification) => Promise<void>;
18
+ }
19
+ /** Strip keys whose value is `undefined`, returning an object with only the
20
+ * present keys. Return type correctly omits the `undefined` union so the result
21
+ * is compatible with `exactOptionalPropertyTypes`. */
22
+ type Compacted<T extends object> = {
23
+ [K in keyof T as Exclude<T[K], undefined> extends never ? never : K]?: Exclude<T[K], undefined>;
24
+ };
25
+ export declare function compact<T extends object>(obj: T): Compacted<T>;
26
+ export declare function parseHandlerExtra(extra: unknown): HandlerExtra | undefined;
27
+ export declare function resolveTaskOwnerKey(extra?: HandlerExtra): string;
28
+ export declare function resolveToolCallContext(extra?: HandlerExtra): ToolCallContext;
29
+ export declare function isServerResult(value: unknown): value is ServerResult;
30
+ export declare function tryReadToolStructuredError(value: unknown): string | undefined;
31
+ export {};
32
+ //# sourceMappingURL=owner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../src/tasks/owner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAIvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOxD,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED;;sDAEsD;AACtD,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,KAAK,GACnD,KAAK,GACL,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAClC,CAAC;AAEF,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAQ9D;AA2BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAyB1E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAMhE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,eAAe,CAO5E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAkB7E"}
@@ -0,0 +1,92 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isObject } from '../type-guards.js';
3
+ export function compact(obj) {
4
+ const result = {};
5
+ for (const key of Object.keys(obj)) {
6
+ if (obj[key] !== undefined) {
7
+ result[key] = obj[key];
8
+ }
9
+ }
10
+ return result;
11
+ }
12
+ function normalizeSendNotification(sendNotification) {
13
+ if (typeof sendNotification !== 'function')
14
+ return undefined;
15
+ const notify = sendNotification;
16
+ return async (notification) => {
17
+ await Promise.resolve(notify(notification));
18
+ };
19
+ }
20
+ function normalizeAuthInfo(authInfo) {
21
+ if (!isObject(authInfo))
22
+ return undefined;
23
+ const { clientId, token } = authInfo;
24
+ const normalized = {};
25
+ if (typeof clientId === 'string')
26
+ normalized.clientId = clientId;
27
+ if (typeof token === 'string')
28
+ normalized.token = token;
29
+ return normalized.clientId || normalized.token ? normalized : undefined;
30
+ }
31
+ export function parseHandlerExtra(extra) {
32
+ if (!isObject(extra))
33
+ return undefined;
34
+ const parsed = {};
35
+ const { sessionId, authInfo, signal, requestId, sendNotification } = extra;
36
+ if (typeof sessionId === 'string')
37
+ parsed.sessionId = sessionId;
38
+ const normalizedAuthInfo = normalizeAuthInfo(authInfo);
39
+ if (normalizedAuthInfo) {
40
+ parsed.authInfo = normalizedAuthInfo;
41
+ }
42
+ if (signal instanceof AbortSignal)
43
+ parsed.signal = signal;
44
+ if (typeof requestId === 'string' || typeof requestId === 'number') {
45
+ parsed.requestId = requestId;
46
+ }
47
+ const normalizedSendNotification = normalizeSendNotification(sendNotification);
48
+ if (normalizedSendNotification) {
49
+ parsed.sendNotification = normalizedSendNotification;
50
+ }
51
+ return parsed;
52
+ }
53
+ export function resolveTaskOwnerKey(extra) {
54
+ if (extra?.sessionId)
55
+ return `session:${extra.sessionId}`;
56
+ if (extra?.authInfo?.clientId)
57
+ return `client:${extra.authInfo.clientId}`;
58
+ if (extra?.authInfo?.token)
59
+ return `token:${createHash('sha256').update(extra.authInfo.token).digest('hex')}`;
60
+ return 'default';
61
+ }
62
+ export function resolveToolCallContext(extra) {
63
+ return compact({
64
+ ownerKey: resolveTaskOwnerKey(extra),
65
+ signal: extra?.signal,
66
+ requestId: extra?.requestId,
67
+ sendNotification: extra?.sendNotification,
68
+ });
69
+ }
70
+ export function isServerResult(value) {
71
+ return (isObject(value) && Array.isArray(value.content));
72
+ }
73
+ export function tryReadToolStructuredError(value) {
74
+ if (!isObject(value))
75
+ return undefined;
76
+ const record = value;
77
+ if (!Array.isArray(record.content) || record.content.length === 0)
78
+ return undefined;
79
+ const firstBlock = record.content[0];
80
+ if (!isObject(firstBlock) ||
81
+ firstBlock['type'] !== 'text' ||
82
+ typeof firstBlock['text'] !== 'string')
83
+ return undefined;
84
+ try {
85
+ const parsed = JSON.parse(firstBlock['text']);
86
+ return typeof parsed.error === 'string' ? parsed.error : undefined;
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ //# sourceMappingURL=owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/tasks/owner.ts"],"names":[],"mappings":"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"}
@@ -3,3 +3,4 @@ export interface CancellableTimeout<T> {
3
3
  cancel: () => void;
4
4
  }
5
5
  export declare function createUnrefTimeout<T>(timeoutMs: number, value: T): CancellableTimeout<T>;
6
+ //# sourceMappingURL=timer-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer-utils.d.ts","sourceRoot":"","sources":["../src/timer-utils.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAsBD,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,CAAC,GACP,kBAAkB,CAAC,CAAC,CAAC,CAcvB"}
@@ -3,17 +3,20 @@ import { isError } from './type-guards.js';
3
3
  function isAbortError(error) {
4
4
  return isError(error) && error.name === 'AbortError';
5
5
  }
6
- export function createUnrefTimeout(timeoutMs, value) {
7
- const controller = new AbortController();
8
- const promise = setTimeoutPromise(timeoutMs, value, {
6
+ function createAbortSafeTimeoutPromise(timeoutMs, value, signal) {
7
+ return setTimeoutPromise(timeoutMs, value, {
9
8
  ref: false,
10
- signal: controller.signal,
9
+ signal,
11
10
  }).catch((err) => {
12
11
  if (isAbortError(err)) {
13
12
  return new Promise(() => { });
14
13
  }
15
14
  throw err;
16
15
  });
16
+ }
17
+ export function createUnrefTimeout(timeoutMs, value) {
18
+ const controller = new AbortController();
19
+ const promise = createAbortSafeTimeoutPromise(timeoutMs, value, controller.signal);
17
20
  return {
18
21
  promise,
19
22
  cancel: () => {
@@ -21,3 +24,4 @@ export function createUnrefTimeout(timeoutMs, value) {
21
24
  },
22
25
  };
23
26
  }
27
+ //# sourceMappingURL=timer-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timer-utils.js","sourceRoot":"","sources":["../src/timer-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAO3C,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACvD,CAAC;AAED,SAAS,6BAA6B,CACpC,SAAiB,EACjB,KAAQ,EACR,MAAmB;IAEnB,OAAO,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE;QACzC,GAAG,EAAE,KAAK;QACV,MAAM;KACP,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACxB,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,OAAO,CAAI,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,KAAQ;IAER,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,6BAA6B,CAC3C,SAAS,EACT,KAAK,EACL,UAAU,CAAC,MAAM,CAClB,CAAC;IAEF,OAAO;QACL,OAAO;QACP,MAAM,EAAE,GAAG,EAAE;YACX,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ type ToolErrorResponse = CallToolResult & {
3
+ isError: true;
4
+ };
5
+ export declare function createToolErrorResponse(message: string, url: string, extra?: {
6
+ code?: string;
7
+ statusCode?: number;
8
+ details?: Record<string, unknown>;
9
+ }): ToolErrorResponse;
10
+ export declare function handleToolError(error: unknown, url: string, fallbackMessage?: string): ToolErrorResponse;
11
+ export {};
12
+ //# sourceMappingURL=tool-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-errors.d.ts","sourceRoot":"","sources":["../src/tool-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAQzE,KAAK,iBAAiB,GAAG,cAAc,GAAG;IACxC,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,GACA,iBAAiB,CAenB;AAoCD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,MAAM,EACX,eAAe,SAAqB,GACnC,iBAAiB,CAWnB"}
@@ -0,0 +1,55 @@
1
+ import { FetchError, isSystemError } from './errors.js';
2
+ export function createToolErrorResponse(message, url, extra) {
3
+ const errorContent = {
4
+ error: message,
5
+ ...(extra?.code ? { code: extra.code } : {}),
6
+ url,
7
+ ...(extra?.statusCode !== undefined
8
+ ? { statusCode: extra.statusCode }
9
+ : {}),
10
+ ...(extra?.details ? { details: extra.details } : {}),
11
+ };
12
+ return {
13
+ content: [{ type: 'text', text: JSON.stringify(errorContent) }],
14
+ isError: true,
15
+ };
16
+ }
17
+ function isValidationError(error) {
18
+ return (error instanceof Error &&
19
+ isSystemError(error) &&
20
+ error.code === 'VALIDATION_ERROR');
21
+ }
22
+ function isHandledToolError(error) {
23
+ return error instanceof FetchError || isValidationError(error);
24
+ }
25
+ function resolveToolErrorMessage(error, fallbackMessage) {
26
+ if (isHandledToolError(error)) {
27
+ return error.message;
28
+ }
29
+ if (error instanceof Error) {
30
+ return `${fallbackMessage}: ${error.message}`;
31
+ }
32
+ return `${fallbackMessage}: Unknown error`;
33
+ }
34
+ function resolveToolErrorCode(error) {
35
+ if (error instanceof FetchError)
36
+ return error.code;
37
+ if (isValidationError(error))
38
+ return 'VALIDATION_ERROR';
39
+ if (error instanceof Error && error.name === 'AbortError')
40
+ return 'ABORTED';
41
+ return 'FETCH_ERROR';
42
+ }
43
+ export function handleToolError(error, url, fallbackMessage = 'Operation failed') {
44
+ const message = resolveToolErrorMessage(error, fallbackMessage);
45
+ const code = resolveToolErrorCode(error);
46
+ if (error instanceof FetchError) {
47
+ return createToolErrorResponse(message, url, {
48
+ code,
49
+ statusCode: error.statusCode,
50
+ details: error.details,
51
+ });
52
+ }
53
+ return createToolErrorResponse(message, url, { code });
54
+ }
55
+ //# sourceMappingURL=tool-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-errors.js","sourceRoot":"","sources":["../src/tool-errors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAUxD,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,GAAW,EACX,KAIC;IAED,MAAM,YAAY,GAA4B;QAC5C,KAAK,EAAE,OAAO;QACd,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG;QACH,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,KAAK,YAAY,KAAK;QACtB,aAAa,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc;IAEd,OAAO,KAAK,YAAY,UAAU,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAc,EACd,eAAuB;IAEvB,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,eAAe,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,GAAG,eAAe,iBAAiB,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IACnD,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACxD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,SAAS,CAAC;IAC5E,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,GAAW,EACX,eAAe,GAAG,kBAAkB;IAEpC,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3C,IAAI;YACJ,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,72 @@
1
+ import type { MarkdownTransformResult } from './transform/types.js';
2
+ type JsonRecord = Record<string, unknown>;
3
+ export declare function readUnknown(obj: unknown, key: string): unknown;
4
+ export declare function readString(obj: unknown, key: string): string | undefined;
5
+ export declare function readNestedRecord(obj: unknown, keys: readonly string[]): JsonRecord | undefined;
6
+ export declare function withSignal(signal?: AbortSignal): {
7
+ signal: AbortSignal;
8
+ } | Record<string, never>;
9
+ export declare const TRUNCATION_MARKER = "...[truncated]";
10
+ export interface InlineContentResult {
11
+ content?: string;
12
+ contentSize: number;
13
+ truncated?: boolean;
14
+ }
15
+ export declare function appendTruncationMarker(content: string, marker: string): string;
16
+ interface FetchPipelineOptions<T> {
17
+ url: string;
18
+ cacheNamespace: string;
19
+ signal?: AbortSignal;
20
+ cacheVary?: Record<string, unknown> | string;
21
+ forceRefresh?: boolean;
22
+ transform: (input: {
23
+ buffer: Uint8Array;
24
+ encoding: string;
25
+ truncated?: boolean;
26
+ }, url: string) => T | Promise<T>;
27
+ serialize?: (result: T) => string;
28
+ deserialize?: (cached: string) => T | undefined;
29
+ }
30
+ export interface PipelineResult<T> {
31
+ data: T;
32
+ fromCache: boolean;
33
+ url: string;
34
+ originalUrl?: string;
35
+ finalUrl?: string;
36
+ fetchedAt: string;
37
+ cacheKey?: string | null;
38
+ }
39
+ export declare function executeFetchPipeline<T>(options: FetchPipelineOptions<T>): Promise<PipelineResult<T>>;
40
+ export type MarkdownPipelineResult = MarkdownTransformResult & {
41
+ readonly content: string;
42
+ };
43
+ export declare function parseCachedMarkdownResult(cached: string): MarkdownPipelineResult | undefined;
44
+ export declare const markdownTransform: (input: {
45
+ buffer: Uint8Array;
46
+ encoding: string;
47
+ truncated?: boolean;
48
+ }, url: string, signal?: AbortSignal, skipNoiseRemoval?: boolean) => Promise<MarkdownPipelineResult>;
49
+ export declare function serializeMarkdownResult(result: MarkdownPipelineResult): string;
50
+ interface SharedFetchOptions {
51
+ readonly url: string;
52
+ readonly signal?: AbortSignal;
53
+ readonly cacheVary?: Record<string, unknown> | string;
54
+ readonly forceRefresh?: boolean;
55
+ readonly maxInlineChars?: number;
56
+ readonly transform: (input: {
57
+ buffer: Uint8Array;
58
+ encoding: string;
59
+ truncated?: boolean;
60
+ }, normalizedUrl: string) => MarkdownPipelineResult | Promise<MarkdownPipelineResult>;
61
+ readonly serialize?: (result: MarkdownPipelineResult) => string;
62
+ readonly deserialize?: (cached: string) => MarkdownPipelineResult | undefined;
63
+ }
64
+ interface SharedFetchDeps {
65
+ readonly executeFetchPipeline?: typeof executeFetchPipeline;
66
+ }
67
+ export declare function performSharedFetch(options: SharedFetchOptions, deps?: SharedFetchDeps): Promise<{
68
+ pipeline: PipelineResult<MarkdownPipelineResult>;
69
+ inlineResult: InlineContentResult;
70
+ }>;
71
+ export {};
72
+ //# sourceMappingURL=tool-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-pipeline.d.ts","sourceRoot":"","sources":["../src/tool-pipeline.ts"],"names":[],"mappings":"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"}