@j0hanz/fetch-url-mcp 1.12.7 → 1.12.8
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.
- package/dist/http/auth.d.ts +2 -2
- package/dist/http/auth.d.ts.map +1 -1
- package/dist/http/auth.js +4 -5
- package/dist/http/index.d.ts +6 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +5 -0
- package/dist/http/native.d.ts +73 -0
- package/dist/http/native.d.ts.map +1 -1
- package/dist/http/native.js +554 -10
- package/dist/http/rate-limit.d.ts +1 -1
- package/dist/http/rate-limit.d.ts.map +1 -1
- package/dist/http/rate-limit.js +3 -4
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -6
- package/dist/lib/config.js +2 -2
- package/dist/lib/core.d.ts +56 -4
- package/dist/lib/core.d.ts.map +1 -1
- package/dist/lib/core.js +155 -4
- package/dist/lib/error/classes.d.ts +19 -0
- package/dist/lib/error/classes.d.ts.map +1 -0
- package/dist/lib/error/classes.js +107 -0
- package/dist/lib/error/classify.d.ts +4 -0
- package/dist/lib/error/classify.d.ts.map +1 -0
- package/dist/lib/error/classify.js +154 -0
- package/dist/lib/error/codes.d.ts +23 -0
- package/dist/lib/error/codes.d.ts.map +1 -0
- package/dist/lib/error/codes.js +22 -0
- package/dist/lib/error/index.d.ts +6 -0
- package/dist/lib/error/index.d.ts.map +1 -0
- package/dist/lib/error/index.js +5 -0
- package/dist/lib/{error-messages.d.ts → error/messages.d.ts} +2 -2
- package/dist/lib/error/messages.d.ts.map +1 -0
- package/dist/lib/{error-messages.js → error/messages.js} +2 -2
- package/dist/lib/{tool-errors.d.ts → error/payload.d.ts} +7 -13
- package/dist/lib/error/payload.d.ts.map +1 -0
- package/dist/lib/error/payload.js +108 -0
- package/dist/lib/mcp-interop.d.ts.map +1 -1
- package/dist/lib/mcp-interop.js +4 -6
- package/dist/lib/net/http.d.ts.map +1 -0
- package/dist/lib/{http.js → net/http.js} +4 -7
- package/dist/lib/net/index.d.ts +4 -0
- package/dist/lib/net/index.d.ts.map +1 -0
- package/dist/lib/net/index.js +3 -0
- package/dist/lib/{fetch-pipeline.d.ts → net/pipeline.d.ts} +3 -3
- package/dist/lib/net/pipeline.d.ts.map +1 -0
- package/dist/lib/{fetch-pipeline.js → net/pipeline.js} +3 -5
- package/dist/lib/{url.d.ts → net/url.d.ts} +1 -1
- package/dist/lib/net/url.d.ts.map +1 -0
- package/dist/lib/{url.js → net/url.js} +3 -5
- package/dist/lib/utils.d.ts +2 -18
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +29 -104
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +8 -5
- package/dist/schemas.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -9
- package/dist/tasks/index.d.ts +2 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +1 -0
- package/dist/tasks/manager.d.ts +123 -1
- package/dist/tasks/manager.d.ts.map +1 -1
- package/dist/tasks/manager.js +745 -10
- package/dist/tools/{fetch-url.d.ts → index.d.ts} +4 -5
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/{fetch-url.js → index.js} +6 -8
- package/dist/transform/index.d.ts +279 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +5234 -0
- package/package.json +2 -2
- package/dist/cli.d.ts +0 -19
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -65
- package/dist/http/health.d.ts +0 -8
- package/dist/http/health.d.ts.map +0 -1
- package/dist/http/health.js +0 -152
- package/dist/http/helpers.d.ts +0 -68
- package/dist/http/helpers.d.ts.map +0 -1
- package/dist/http/helpers.js +0 -402
- package/dist/lib/error-codes.d.ts +0 -13
- package/dist/lib/error-codes.d.ts.map +0 -1
- package/dist/lib/error-codes.js +0 -12
- package/dist/lib/error-messages.d.ts.map +0 -1
- package/dist/lib/fetch-pipeline.d.ts.map +0 -1
- package/dist/lib/http.d.ts.map +0 -1
- package/dist/lib/logger-names.d.ts +0 -16
- package/dist/lib/logger-names.d.ts.map +0 -1
- package/dist/lib/logger-names.js +0 -15
- package/dist/lib/session.d.ts +0 -44
- package/dist/lib/session.d.ts.map +0 -1
- package/dist/lib/session.js +0 -137
- package/dist/lib/tool-errors.d.ts.map +0 -1
- package/dist/lib/tool-errors.js +0 -253
- package/dist/lib/url.d.ts.map +0 -1
- package/dist/lib/zod.d.ts +0 -3
- package/dist/lib/zod.d.ts.map +0 -1
- package/dist/lib/zod.js +0 -27
- package/dist/tasks/call-contract.d.ts +0 -25
- package/dist/tasks/call-contract.d.ts.map +0 -1
- package/dist/tasks/call-contract.js +0 -59
- package/dist/tasks/execution.d.ts +0 -16
- package/dist/tasks/execution.d.ts.map +0 -1
- package/dist/tasks/execution.js +0 -241
- package/dist/tasks/handlers.d.ts +0 -11
- package/dist/tasks/handlers.d.ts.map +0 -1
- package/dist/tasks/handlers.js +0 -157
- package/dist/tasks/owner.d.ts +0 -43
- package/dist/tasks/owner.d.ts.map +0 -1
- package/dist/tasks/owner.js +0 -144
- package/dist/tasks/registry.d.ts +0 -20
- package/dist/tasks/registry.d.ts.map +0 -1
- package/dist/tasks/registry.js +0 -40
- package/dist/tasks/waiters.d.ts +0 -27
- package/dist/tasks/waiters.d.ts.map +0 -1
- package/dist/tasks/waiters.js +0 -114
- package/dist/tools/fetch-url.d.ts.map +0 -1
- package/dist/transform/dom-prep.d.ts +0 -16
- package/dist/transform/dom-prep.d.ts.map +0 -1
- package/dist/transform/dom-prep.js +0 -1287
- package/dist/transform/html-translators.d.ts +0 -5
- package/dist/transform/html-translators.d.ts.map +0 -1
- package/dist/transform/html-translators.js +0 -697
- package/dist/transform/markdown-cleanup.d.ts +0 -10
- package/dist/transform/markdown-cleanup.d.ts.map +0 -1
- package/dist/transform/markdown-cleanup.js +0 -542
- package/dist/transform/metadata.d.ts +0 -18
- package/dist/transform/metadata.d.ts.map +0 -1
- package/dist/transform/metadata.js +0 -462
- package/dist/transform/next-flight.d.ts +0 -2
- package/dist/transform/next-flight.d.ts.map +0 -1
- package/dist/transform/next-flight.js +0 -374
- package/dist/transform/shared.d.ts +0 -8
- package/dist/transform/shared.d.ts.map +0 -1
- package/dist/transform/shared.js +0 -137
- package/dist/transform/transform.d.ts +0 -38
- package/dist/transform/transform.d.ts.map +0 -1
- package/dist/transform/transform.js +0 -1042
- package/dist/transform/types.d.ts +0 -124
- package/dist/transform/types.d.ts.map +0 -1
- package/dist/transform/types.js +0 -5
- package/dist/transform/worker-pool.d.ts +0 -76
- package/dist/transform/worker-pool.d.ts.map +0 -1
- package/dist/transform/worker-pool.js +0 -725
- /package/dist/lib/{http.d.ts → net/http.d.ts} +0 -0
package/dist/http/helpers.js
DELETED
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
import { Writable } from 'node:stream';
|
|
2
|
-
import { pipeline } from 'node:stream/promises';
|
|
3
|
-
import { composeCloseHandlers, config, logWarn } from '../lib/core.js';
|
|
4
|
-
import { resolveMcpSessionIdByServer, unregisterMcpSessionServer, unregisterMcpSessionServerByServer, } from '../lib/core.js';
|
|
5
|
-
import { Loggers } from '../lib/logger-names.js';
|
|
6
|
-
import { createDefaultBlockList, normalizeIpForBlockList } from '../lib/url.js';
|
|
7
|
-
import { getErrorMessage, toError } from '../lib/utils.js';
|
|
8
|
-
function abortControllerBestEffort(controller) {
|
|
9
|
-
if (!controller.signal.aborted)
|
|
10
|
-
controller.abort();
|
|
11
|
-
}
|
|
12
|
-
function destroyRequestBestEffort(req) {
|
|
13
|
-
try {
|
|
14
|
-
req.destroy();
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
// Best-effort only.
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
// Response helpers
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
function setNoStoreHeaders(res) {
|
|
24
|
-
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
25
|
-
res.setHeader('Cache-Control', 'no-store');
|
|
26
|
-
}
|
|
27
|
-
export function sendJson(res, status, body) {
|
|
28
|
-
res.statusCode = status;
|
|
29
|
-
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
30
|
-
setNoStoreHeaders(res);
|
|
31
|
-
res.end(JSON.stringify(body));
|
|
32
|
-
}
|
|
33
|
-
export function sendEmpty(res, status) {
|
|
34
|
-
res.statusCode = status;
|
|
35
|
-
res.setHeader('Content-Length', '0');
|
|
36
|
-
res.end();
|
|
37
|
-
}
|
|
38
|
-
export function sendError(res, _code, message, status = 400,
|
|
39
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
40
|
-
_id = null) {
|
|
41
|
-
sendJson(res, status, { error: message });
|
|
42
|
-
}
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// Request helpers
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
export function getHeaderValue(req, name) {
|
|
47
|
-
const val = req.headers[name];
|
|
48
|
-
if (!val)
|
|
49
|
-
return null;
|
|
50
|
-
return Array.isArray(val) ? (val[0] ?? null) : val;
|
|
51
|
-
}
|
|
52
|
-
export function getMcpSessionId(req) {
|
|
53
|
-
return (getHeaderValue(req, 'mcp-session-id') ??
|
|
54
|
-
getHeaderValue(req, 'x-mcp-session-id'));
|
|
55
|
-
}
|
|
56
|
-
const SINGLE_VALUE_HEADER_NAMES = [
|
|
57
|
-
'authorization',
|
|
58
|
-
'x-api-key',
|
|
59
|
-
'host',
|
|
60
|
-
'origin',
|
|
61
|
-
'content-length',
|
|
62
|
-
'mcp-protocol-version',
|
|
63
|
-
'mcp-session-id',
|
|
64
|
-
'x-mcp-session-id',
|
|
65
|
-
];
|
|
66
|
-
function hasDuplicateHeader(req, name) {
|
|
67
|
-
const values = req.headersDistinct[name];
|
|
68
|
-
return Array.isArray(values) && values.length > 1;
|
|
69
|
-
}
|
|
70
|
-
export function findDuplicateSingleValueHeader(req) {
|
|
71
|
-
for (const name of SINGLE_VALUE_HEADER_NAMES) {
|
|
72
|
-
if (hasDuplicateHeader(req, name))
|
|
73
|
-
return name;
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
export function drainRequest(req) {
|
|
78
|
-
if (req.readableEnded)
|
|
79
|
-
return;
|
|
80
|
-
try {
|
|
81
|
-
req.resume();
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// Best-effort only.
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
// ---------------------------------------------------------------------------
|
|
88
|
-
// Request abort signal
|
|
89
|
-
// ---------------------------------------------------------------------------
|
|
90
|
-
export function createRequestAbortSignal(req) {
|
|
91
|
-
const controller = new AbortController();
|
|
92
|
-
let cleanedUp = false;
|
|
93
|
-
const abortRequest = () => {
|
|
94
|
-
if (cleanedUp)
|
|
95
|
-
return;
|
|
96
|
-
abortControllerBestEffort(controller);
|
|
97
|
-
};
|
|
98
|
-
if (req.destroyed) {
|
|
99
|
-
abortRequest();
|
|
100
|
-
return {
|
|
101
|
-
signal: controller.signal,
|
|
102
|
-
cleanup: () => {
|
|
103
|
-
cleanedUp = true;
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
const onClose = () => {
|
|
108
|
-
// A normal close after a complete body should not be treated as cancellation.
|
|
109
|
-
if (req.complete)
|
|
110
|
-
return;
|
|
111
|
-
abortRequest();
|
|
112
|
-
};
|
|
113
|
-
const onError = () => {
|
|
114
|
-
abortRequest();
|
|
115
|
-
};
|
|
116
|
-
req.once('close', onClose);
|
|
117
|
-
req.once('error', onError);
|
|
118
|
-
return {
|
|
119
|
-
signal: controller.signal,
|
|
120
|
-
cleanup: () => {
|
|
121
|
-
cleanedUp = true;
|
|
122
|
-
req.removeListener('close', onClose);
|
|
123
|
-
req.removeListener('error', onError);
|
|
124
|
-
},
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
// ---------------------------------------------------------------------------
|
|
128
|
-
// IP & connection helpers
|
|
129
|
-
// ---------------------------------------------------------------------------
|
|
130
|
-
function normalizeRemoteAddress(address) {
|
|
131
|
-
if (!address)
|
|
132
|
-
return null;
|
|
133
|
-
const trimmed = address.trim();
|
|
134
|
-
if (!trimmed)
|
|
135
|
-
return null;
|
|
136
|
-
const normalized = normalizeIpForBlockList(trimmed);
|
|
137
|
-
if (normalized)
|
|
138
|
-
return normalized.ip;
|
|
139
|
-
return trimmed;
|
|
140
|
-
}
|
|
141
|
-
export function registerInboundBlockList(server) {
|
|
142
|
-
if (!config.server.http.blockPrivateConnections)
|
|
143
|
-
return;
|
|
144
|
-
const blockList = createDefaultBlockList();
|
|
145
|
-
server.on('connection', (socket) => {
|
|
146
|
-
const raw = socket.remoteAddress?.trim();
|
|
147
|
-
if (!raw)
|
|
148
|
-
return;
|
|
149
|
-
const normalized = normalizeIpForBlockList(raw);
|
|
150
|
-
if (!normalized)
|
|
151
|
-
return;
|
|
152
|
-
if (blockList.check(normalized.ip, normalized.family)) {
|
|
153
|
-
logWarn('Blocked inbound connection', {
|
|
154
|
-
remoteAddress: normalized.ip,
|
|
155
|
-
family: normalized.family,
|
|
156
|
-
}, Loggers.LOG_HTTP);
|
|
157
|
-
socket.destroy();
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
// ---------------------------------------------------------------------------
|
|
162
|
-
// Request context builder
|
|
163
|
-
// ---------------------------------------------------------------------------
|
|
164
|
-
export function buildRequestContext(req, res, signal) {
|
|
165
|
-
const url = URL.parse(req.url ?? '', 'http://localhost');
|
|
166
|
-
if (!url) {
|
|
167
|
-
sendJson(res, 400, { error: 'Invalid request URL' });
|
|
168
|
-
return null;
|
|
169
|
-
}
|
|
170
|
-
return {
|
|
171
|
-
req,
|
|
172
|
-
res,
|
|
173
|
-
url,
|
|
174
|
-
method: req.method,
|
|
175
|
-
ip: normalizeRemoteAddress(req.socket.remoteAddress),
|
|
176
|
-
body: undefined,
|
|
177
|
-
...(signal ? { signal } : {}),
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
// ---------------------------------------------------------------------------
|
|
181
|
-
// Transport / MCP helpers
|
|
182
|
-
// ---------------------------------------------------------------------------
|
|
183
|
-
export async function closeTransportBestEffort(transport, context) {
|
|
184
|
-
try {
|
|
185
|
-
await transport.close();
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
logWarn('Transport close failed', { context, error }, Loggers.LOG_HTTP);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
export async function closeMcpServerBestEffort(server, context) {
|
|
192
|
-
try {
|
|
193
|
-
await server.close();
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
logWarn('MCP server close failed', { context, error }, Loggers.LOG_HTTP);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
export function createTransportAdapter(transportImpl) {
|
|
200
|
-
const noopOnClose = () => { };
|
|
201
|
-
const noopOnError = () => { };
|
|
202
|
-
const noopOnMessage = () => { };
|
|
203
|
-
const baseOnClose = transportImpl.onclose;
|
|
204
|
-
let oncloseHandler = noopOnClose;
|
|
205
|
-
let onerrorHandler = noopOnError;
|
|
206
|
-
let onmessageHandler = noopOnMessage;
|
|
207
|
-
return {
|
|
208
|
-
start: () => transportImpl.start(),
|
|
209
|
-
send: (message, options) => transportImpl.send(message, options),
|
|
210
|
-
close: () => transportImpl.close(),
|
|
211
|
-
get onclose() {
|
|
212
|
-
return oncloseHandler;
|
|
213
|
-
},
|
|
214
|
-
set onclose(handler) {
|
|
215
|
-
oncloseHandler = handler;
|
|
216
|
-
transportImpl.onclose = composeCloseHandlers(baseOnClose, handler);
|
|
217
|
-
},
|
|
218
|
-
get onerror() {
|
|
219
|
-
return onerrorHandler;
|
|
220
|
-
},
|
|
221
|
-
set onerror(handler) {
|
|
222
|
-
onerrorHandler = handler;
|
|
223
|
-
transportImpl.onerror = handler;
|
|
224
|
-
},
|
|
225
|
-
get onmessage() {
|
|
226
|
-
return onmessageHandler;
|
|
227
|
-
},
|
|
228
|
-
set onmessage(handler) {
|
|
229
|
-
onmessageHandler = handler;
|
|
230
|
-
transportImpl.onmessage = handler;
|
|
231
|
-
},
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
export class JsonBodyError extends Error {
|
|
235
|
-
kind;
|
|
236
|
-
constructor(kind, message) {
|
|
237
|
-
super(message);
|
|
238
|
-
this.name = 'JsonBodyError';
|
|
239
|
-
this.kind = kind;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
export function isJsonBodyError(error) {
|
|
243
|
-
return error instanceof JsonBodyError;
|
|
244
|
-
}
|
|
245
|
-
export const DEFAULT_BODY_LIMIT_BYTES = 1024 * 1024;
|
|
246
|
-
function isRequestReadAborted(req) {
|
|
247
|
-
return req.destroyed && !req.complete;
|
|
248
|
-
}
|
|
249
|
-
class JsonBodyReader {
|
|
250
|
-
async read(req, limit = DEFAULT_BODY_LIMIT_BYTES, signal) {
|
|
251
|
-
const contentType = getHeaderValue(req, 'content-type');
|
|
252
|
-
if (!contentType?.includes('application/json'))
|
|
253
|
-
return undefined;
|
|
254
|
-
const contentLengthHeader = getHeaderValue(req, 'content-length');
|
|
255
|
-
if (contentLengthHeader) {
|
|
256
|
-
const contentLength = Number.parseInt(contentLengthHeader, 10);
|
|
257
|
-
if (Number.isFinite(contentLength) && contentLength > limit) {
|
|
258
|
-
const error = new JsonBodyError('payload-too-large', 'Payload too large');
|
|
259
|
-
throw error;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
if (signal?.aborted || isRequestReadAborted(req)) {
|
|
263
|
-
const error = new JsonBodyError('read-failed', 'Request aborted');
|
|
264
|
-
throw error;
|
|
265
|
-
}
|
|
266
|
-
const body = await this.readBody(req, limit, signal);
|
|
267
|
-
if (!body)
|
|
268
|
-
return undefined;
|
|
269
|
-
try {
|
|
270
|
-
return JSON.parse(body);
|
|
271
|
-
}
|
|
272
|
-
catch (err) {
|
|
273
|
-
const error = new JsonBodyError('invalid-json', getErrorMessage(err));
|
|
274
|
-
throw error;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
async readBody(req, limit, signal) {
|
|
278
|
-
const abortListener = signal != null
|
|
279
|
-
? () => {
|
|
280
|
-
destroyRequestBestEffort(req);
|
|
281
|
-
}
|
|
282
|
-
: null;
|
|
283
|
-
if (signal != null && abortListener) {
|
|
284
|
-
if (signal.aborted) {
|
|
285
|
-
abortListener();
|
|
286
|
-
}
|
|
287
|
-
else {
|
|
288
|
-
signal.addEventListener('abort', abortListener, { once: true });
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
try {
|
|
292
|
-
const { chunks, size } = await this.collectChunks(req, limit, signal);
|
|
293
|
-
if (chunks.length === 0)
|
|
294
|
-
return undefined;
|
|
295
|
-
const combined = new Uint8Array(size);
|
|
296
|
-
let offset = 0;
|
|
297
|
-
for (const chunk of chunks) {
|
|
298
|
-
combined.set(chunk, offset);
|
|
299
|
-
offset += chunk.byteLength;
|
|
300
|
-
}
|
|
301
|
-
const text = new TextDecoder().decode(combined);
|
|
302
|
-
return text;
|
|
303
|
-
}
|
|
304
|
-
finally {
|
|
305
|
-
if (signal && abortListener) {
|
|
306
|
-
try {
|
|
307
|
-
signal.removeEventListener('abort', abortListener);
|
|
308
|
-
}
|
|
309
|
-
catch {
|
|
310
|
-
// Best-effort cleanup.
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
async collectChunks(req, limit, signal) {
|
|
316
|
-
let size = 0;
|
|
317
|
-
const chunks = [];
|
|
318
|
-
const sink = new Writable({
|
|
319
|
-
write: (chunk, _encoding, callback) => {
|
|
320
|
-
try {
|
|
321
|
-
if (signal?.aborted || isRequestReadAborted(req)) {
|
|
322
|
-
callback(new JsonBodyError('read-failed', 'Request aborted'));
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
const buf = this.normalizeChunk(chunk);
|
|
326
|
-
size += buf.byteLength;
|
|
327
|
-
if (size > limit) {
|
|
328
|
-
callback(new JsonBodyError('payload-too-large', 'Payload too large'));
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
chunks.push(buf);
|
|
332
|
-
callback();
|
|
333
|
-
}
|
|
334
|
-
catch (err) {
|
|
335
|
-
callback(toError(err));
|
|
336
|
-
}
|
|
337
|
-
},
|
|
338
|
-
});
|
|
339
|
-
try {
|
|
340
|
-
if (signal?.aborted || isRequestReadAborted(req)) {
|
|
341
|
-
const error = new JsonBodyError('read-failed', 'Request aborted');
|
|
342
|
-
throw error;
|
|
343
|
-
}
|
|
344
|
-
await pipeline(req, sink, signal ? { signal } : undefined);
|
|
345
|
-
return { chunks, size };
|
|
346
|
-
}
|
|
347
|
-
catch (err) {
|
|
348
|
-
if (err instanceof JsonBodyError)
|
|
349
|
-
throw err;
|
|
350
|
-
if (signal?.aborted || isRequestReadAborted(req)) {
|
|
351
|
-
const error = new JsonBodyError('read-failed', 'Request aborted');
|
|
352
|
-
throw error;
|
|
353
|
-
}
|
|
354
|
-
const error = new JsonBodyError('read-failed', getErrorMessage(err));
|
|
355
|
-
throw error;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
normalizeChunk(chunk) {
|
|
359
|
-
if (typeof chunk === 'string') {
|
|
360
|
-
const encoded = new TextEncoder().encode(chunk);
|
|
361
|
-
return encoded;
|
|
362
|
-
}
|
|
363
|
-
return chunk;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
export const jsonBodyReader = new JsonBodyReader();
|
|
367
|
-
function unregisterSessionTaskScope(server) {
|
|
368
|
-
const sessionId = resolveMcpSessionIdByServer(server);
|
|
369
|
-
if (!sessionId)
|
|
370
|
-
return null;
|
|
371
|
-
unregisterMcpSessionServer(sessionId);
|
|
372
|
-
return sessionId;
|
|
373
|
-
}
|
|
374
|
-
async function closeSessionResources(session, options) {
|
|
375
|
-
const closeTasks = [];
|
|
376
|
-
if (options.closeTransportReason) {
|
|
377
|
-
closeTasks.push(closeTransportBestEffort(session.transport, options.closeTransportReason));
|
|
378
|
-
}
|
|
379
|
-
if (options.closeServerReason) {
|
|
380
|
-
closeTasks.push(closeMcpServerBestEffort(session.server, options.closeServerReason));
|
|
381
|
-
}
|
|
382
|
-
if (options.awaitClose && closeTasks.length > 0) {
|
|
383
|
-
await Promise.all(closeTasks);
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
export async function teardownSessionResources(session, options) {
|
|
387
|
-
unregisterSessionTaskScope(session.server);
|
|
388
|
-
if (options.unregisterByServer) {
|
|
389
|
-
unregisterMcpSessionServerByServer(session.server);
|
|
390
|
-
}
|
|
391
|
-
await closeSessionResources(session, options);
|
|
392
|
-
}
|
|
393
|
-
export async function teardownUnregisteredSessionResources(session, context) {
|
|
394
|
-
await closeSessionResources(session, {
|
|
395
|
-
closeTransportReason: context,
|
|
396
|
-
closeServerReason: context,
|
|
397
|
-
awaitClose: true,
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
export function teardownSessionRegistration(server) {
|
|
401
|
-
unregisterSessionTaskScope(server);
|
|
402
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export declare const SystemErrors: {
|
|
2
|
-
readonly EBLOCKED: "EBLOCKED";
|
|
3
|
-
readonly ETIMEOUT: "ETIMEOUT";
|
|
4
|
-
readonly EINVAL: "EINVAL";
|
|
5
|
-
readonly ENODATA: "ENODATA";
|
|
6
|
-
readonly EBADREDIRECT: "EBADREDIRECT";
|
|
7
|
-
readonly EUNSUPPORTEDPROTOCOL: "EUNSUPPORTEDPROTOCOL";
|
|
8
|
-
readonly FETCH_ERROR: "FETCH_ERROR";
|
|
9
|
-
readonly ABORTED: "ABORTED";
|
|
10
|
-
readonly QUEUE_FULL: "queue_full";
|
|
11
|
-
readonly VALIDATION_ERROR: "VALIDATION_ERROR";
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=error-codes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../../src/lib/error-codes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC"}
|
package/dist/lib/error-codes.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export const SystemErrors = {
|
|
2
|
-
EBLOCKED: 'EBLOCKED',
|
|
3
|
-
ETIMEOUT: 'ETIMEOUT',
|
|
4
|
-
EINVAL: 'EINVAL',
|
|
5
|
-
ENODATA: 'ENODATA',
|
|
6
|
-
EBADREDIRECT: 'EBADREDIRECT',
|
|
7
|
-
EUNSUPPORTEDPROTOCOL: 'EUNSUPPORTEDPROTOCOL',
|
|
8
|
-
FETCH_ERROR: 'FETCH_ERROR',
|
|
9
|
-
ABORTED: 'ABORTED',
|
|
10
|
-
QUEUE_FULL: 'queue_full',
|
|
11
|
-
VALIDATION_ERROR: 'VALIDATION_ERROR',
|
|
12
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-messages.d.ts","sourceRoot":"","sources":["../../src/lib/error-messages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,UAAU,CAUZ;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAM7D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAM7E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAM5D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAM9D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAMtE;AAED,wBAAgB,oBAAoB,IAAI,UAAU,CAMjD;AAED,wBAAgB,eAAe,IAAI,UAAU,CAG5C;AAID,wBAAgB,oBAAoB,IAAI,UAAU,CAMjD;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAMrD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAMrE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-pipeline.d.ts","sourceRoot":"","sources":["../../src/lib/fetch-pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAQrE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,CAAC;AAGtB,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,UAAU,mBAAmB;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAmGD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,MAAM,GAAG,SAAS,CAQpB;AAyBD,UAAU,oBAAoB,CAAC,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACxE;AACD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,iBAAiB,CAAC;AAmBtB,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAqD5B;AAED,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAwBF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,mBAAmB,EAC1B,KAAK,MAAM,EACX,SAAS,WAAW,KACnB,OAAO,CAAC,sBAAsB,CAchC,CAAC;AAEF,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,MAAM,KAClB,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC/D;AACD,UAAU,eAAe;IACvB,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,oBAAoB,CAAC;CAC7D;AAMD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC;IACT,QAAQ,EAAE,cAAc,CAAC,sBAAsB,CAAC,CAAC;IACjD,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC,CAyBD"}
|
package/dist/lib/http.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAmBhD,OAAO,EAOL,KAAK,eAAe,EAErB,MAAM,UAAU,CAAC;AAkxClB,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoKD,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA6ND,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE/C;AACD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAEA;AACD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AACD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAE9D;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExD;AACD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,qBAAqB,CAEvB;AACD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAEN;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAEN;AACD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAE7D;AACD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CASzC;AACD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB;AACD,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;IACT,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAED"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logger names for different components of the application.
|
|
3
|
-
*/
|
|
4
|
-
export declare const Loggers: {
|
|
5
|
-
readonly LOG_AUTH: "auth";
|
|
6
|
-
readonly LOG_HTTP: "http";
|
|
7
|
-
readonly LOG_SESSION: "session";
|
|
8
|
-
readonly LOG_SERVER: "server";
|
|
9
|
-
readonly LOG_FETCH: "fetch";
|
|
10
|
-
readonly LOG_TRANSFORM: "transform";
|
|
11
|
-
readonly LOG_TASKS: "tasks";
|
|
12
|
-
readonly LOG_RATE_LIMIT: "rate-limit";
|
|
13
|
-
readonly LOG_MCP: "mcp";
|
|
14
|
-
readonly LOG_FETCH_URL: "fetch-url";
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=logger-names.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger-names.d.ts","sourceRoot":"","sources":["../../src/lib/logger-names.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;CAWV,CAAC"}
|
package/dist/lib/logger-names.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Logger names for different components of the application.
|
|
3
|
-
*/
|
|
4
|
-
export const Loggers = {
|
|
5
|
-
LOG_AUTH: 'auth',
|
|
6
|
-
LOG_HTTP: 'http',
|
|
7
|
-
LOG_SESSION: 'session',
|
|
8
|
-
LOG_SERVER: 'server',
|
|
9
|
-
LOG_FETCH: 'fetch',
|
|
10
|
-
LOG_TRANSFORM: 'transform',
|
|
11
|
-
LOG_TASKS: 'tasks',
|
|
12
|
-
LOG_RATE_LIMIT: 'rate-limit',
|
|
13
|
-
LOG_MCP: 'mcp',
|
|
14
|
-
LOG_FETCH_URL: 'fetch-url',
|
|
15
|
-
};
|
package/dist/lib/session.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import type { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
3
|
-
export interface SessionEntry {
|
|
4
|
-
readonly server: McpServer;
|
|
5
|
-
readonly transport: StreamableHTTPServerTransport;
|
|
6
|
-
createdAt: number;
|
|
7
|
-
lastSeen: number;
|
|
8
|
-
protocolInitialized: boolean;
|
|
9
|
-
negotiatedProtocolVersion: string;
|
|
10
|
-
authFingerprint: string;
|
|
11
|
-
}
|
|
12
|
-
export interface SessionStore {
|
|
13
|
-
get: (sessionId: string) => SessionEntry | undefined;
|
|
14
|
-
touch: (sessionId: string) => void;
|
|
15
|
-
set: (sessionId: string, entry: SessionEntry) => void;
|
|
16
|
-
remove: (sessionId: string) => SessionEntry | undefined;
|
|
17
|
-
size: () => number;
|
|
18
|
-
inFlight: () => number;
|
|
19
|
-
incrementInFlight: () => void;
|
|
20
|
-
decrementInFlight: () => void;
|
|
21
|
-
clear: () => SessionEntry[];
|
|
22
|
-
evictExpired: () => {
|
|
23
|
-
id: string;
|
|
24
|
-
entry: SessionEntry;
|
|
25
|
-
}[];
|
|
26
|
-
evictOldest: () => SessionEntry | undefined;
|
|
27
|
-
}
|
|
28
|
-
interface SlotTracker {
|
|
29
|
-
readonly releaseSlot: () => void;
|
|
30
|
-
readonly markInitialized: () => void;
|
|
31
|
-
readonly isInitialized: () => boolean;
|
|
32
|
-
}
|
|
33
|
-
type CloseHandler = (() => void) | undefined;
|
|
34
|
-
export declare function composeCloseHandlers(first: CloseHandler, second: CloseHandler): CloseHandler;
|
|
35
|
-
export declare function createSessionStore(sessionTtlMs: number): SessionStore;
|
|
36
|
-
export declare function createSlotTracker(store: SessionStore): SlotTracker;
|
|
37
|
-
export declare function reserveSessionSlot(store: SessionStore, maxSessions: number): boolean;
|
|
38
|
-
export declare function ensureSessionCapacity({ store, maxSessions, evictOldest, }: {
|
|
39
|
-
store: SessionStore;
|
|
40
|
-
maxSessions: number;
|
|
41
|
-
evictOldest: (store: SessionStore) => boolean;
|
|
42
|
-
}): boolean;
|
|
43
|
-
export {};
|
|
44
|
-
//# sourceMappingURL=session.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAMxG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;IACrD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;IACxD,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,YAAY,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,EAAE,CAAC;IAC1D,WAAW,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;CAC7C;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;CACvC;AAMD,KAAK,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,GACnB,YAAY,CAWd;AA0FD,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAGrE;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAiBlE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAED,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,WAAW,EACX,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;CAC/C,GAAG,OAAO,CAUV"}
|
package/dist/lib/session.js
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
export function composeCloseHandlers(first, second) {
|
|
2
|
-
if (!first)
|
|
3
|
-
return second;
|
|
4
|
-
if (!second)
|
|
5
|
-
return first;
|
|
6
|
-
return () => {
|
|
7
|
-
try {
|
|
8
|
-
first();
|
|
9
|
-
}
|
|
10
|
-
finally {
|
|
11
|
-
second();
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
/* -------------------------------------------------------------------------------------------------
|
|
16
|
-
* In-memory session store
|
|
17
|
-
* ------------------------------------------------------------------------------------------------- */
|
|
18
|
-
class InMemorySessionStore {
|
|
19
|
-
sessionTtlMs;
|
|
20
|
-
sessions = new Map();
|
|
21
|
-
inflight = 0;
|
|
22
|
-
constructor(sessionTtlMs) {
|
|
23
|
-
this.sessionTtlMs = sessionTtlMs;
|
|
24
|
-
}
|
|
25
|
-
get(sessionId) {
|
|
26
|
-
if (sessionId.length === 0)
|
|
27
|
-
return undefined;
|
|
28
|
-
return this.sessions.get(sessionId);
|
|
29
|
-
}
|
|
30
|
-
touch(sessionId) {
|
|
31
|
-
if (sessionId.length === 0)
|
|
32
|
-
return;
|
|
33
|
-
const session = this.sessions.get(sessionId);
|
|
34
|
-
if (!session)
|
|
35
|
-
return;
|
|
36
|
-
session.lastSeen = Date.now();
|
|
37
|
-
this.sessions.delete(sessionId);
|
|
38
|
-
this.sessions.set(sessionId, session);
|
|
39
|
-
}
|
|
40
|
-
set(sessionId, entry) {
|
|
41
|
-
if (sessionId.length === 0)
|
|
42
|
-
return;
|
|
43
|
-
this.sessions.delete(sessionId);
|
|
44
|
-
this.sessions.set(sessionId, entry);
|
|
45
|
-
}
|
|
46
|
-
remove(sessionId) {
|
|
47
|
-
if (sessionId.length === 0)
|
|
48
|
-
return undefined;
|
|
49
|
-
const session = this.sessions.get(sessionId);
|
|
50
|
-
this.sessions.delete(sessionId);
|
|
51
|
-
return session;
|
|
52
|
-
}
|
|
53
|
-
size() {
|
|
54
|
-
return this.sessions.size;
|
|
55
|
-
}
|
|
56
|
-
inFlight() {
|
|
57
|
-
return this.inflight;
|
|
58
|
-
}
|
|
59
|
-
incrementInFlight() {
|
|
60
|
-
this.inflight += 1;
|
|
61
|
-
}
|
|
62
|
-
decrementInFlight() {
|
|
63
|
-
if (this.inflight === 0)
|
|
64
|
-
return;
|
|
65
|
-
this.inflight -= 1;
|
|
66
|
-
}
|
|
67
|
-
clear() {
|
|
68
|
-
const entries = [...this.sessions.values()];
|
|
69
|
-
this.sessions.clear();
|
|
70
|
-
return entries;
|
|
71
|
-
}
|
|
72
|
-
evictExpired() {
|
|
73
|
-
const now = Date.now();
|
|
74
|
-
const evicted = [];
|
|
75
|
-
for (const [id, session] of this.sessions.entries()) {
|
|
76
|
-
if (this.sessionTtlMs > 0 && now - session.lastSeen > this.sessionTtlMs) {
|
|
77
|
-
this.sessions.delete(id);
|
|
78
|
-
evicted.push({ id, entry: session });
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return evicted;
|
|
85
|
-
}
|
|
86
|
-
evictOldest() {
|
|
87
|
-
const oldest = this.sessions.keys().next();
|
|
88
|
-
if (oldest.done)
|
|
89
|
-
return undefined;
|
|
90
|
-
const session = this.sessions.get(oldest.value);
|
|
91
|
-
this.sessions.delete(oldest.value);
|
|
92
|
-
return session;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
export function createSessionStore(sessionTtlMs) {
|
|
96
|
-
const store = new InMemorySessionStore(sessionTtlMs);
|
|
97
|
-
return store;
|
|
98
|
-
}
|
|
99
|
-
/* -------------------------------------------------------------------------------------------------
|
|
100
|
-
* Slot tracking and capacity
|
|
101
|
-
* ------------------------------------------------------------------------------------------------- */
|
|
102
|
-
export function createSlotTracker(store) {
|
|
103
|
-
let slotReleased = false;
|
|
104
|
-
let initialized = false;
|
|
105
|
-
return {
|
|
106
|
-
releaseSlot() {
|
|
107
|
-
if (slotReleased)
|
|
108
|
-
return;
|
|
109
|
-
slotReleased = true;
|
|
110
|
-
store.decrementInFlight();
|
|
111
|
-
},
|
|
112
|
-
markInitialized() {
|
|
113
|
-
initialized = true;
|
|
114
|
-
},
|
|
115
|
-
isInitialized() {
|
|
116
|
-
return initialized;
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
export function reserveSessionSlot(store, maxSessions) {
|
|
121
|
-
if (maxSessions <= 0)
|
|
122
|
-
return false;
|
|
123
|
-
if (store.size() + store.inFlight() >= maxSessions)
|
|
124
|
-
return false;
|
|
125
|
-
store.incrementInFlight();
|
|
126
|
-
return true;
|
|
127
|
-
}
|
|
128
|
-
export function ensureSessionCapacity({ store, maxSessions, evictOldest, }) {
|
|
129
|
-
if (maxSessions <= 0)
|
|
130
|
-
return false;
|
|
131
|
-
if (store.size() + store.inFlight() < maxSessions)
|
|
132
|
-
return true;
|
|
133
|
-
if (store.size() > 0 && evictOldest(store)) {
|
|
134
|
-
return store.size() + store.inFlight() < maxSessions;
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-errors.d.ts","sourceRoot":"","sources":["../../src/lib/tool-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,oCAAoC,CAAC;AAO5C,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuDD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,iBAAiB,CAOnB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,gBAAgB,CAgBlB;AAiBD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,gBAAgB,GAAG,SAAS,CA2B9B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE1E;AA0JD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,MAAM,EACX,eAAe,SAAqB,GACnC,iBAAiB,CAInB;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,iBAAiB,CA0CnB"}
|