@opentabs-dev/mcp-server 0.0.33 → 0.0.35
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/adapter-files.d.ts +10 -7
- package/dist/adapter-files.d.ts.map +1 -1
- package/dist/adapter-files.js +48 -20
- package/dist/adapter-files.js.map +1 -1
- package/dist/audit-disk.js +2 -2
- package/dist/audit-disk.js.map +1 -1
- package/dist/browser-tool-names.d.ts.map +1 -1
- package/dist/browser-tool-names.js +2 -0
- package/dist/browser-tool-names.js.map +1 -1
- package/dist/browser-tools/analyze-site/detect-apis.d.ts +16 -4
- package/dist/browser-tools/analyze-site/detect-apis.d.ts.map +1 -1
- package/dist/browser-tools/analyze-site/detect-apis.js +51 -8
- package/dist/browser-tools/analyze-site/detect-apis.js.map +1 -1
- package/dist/browser-tools/analyze-site/detect-auth.d.ts.map +1 -1
- package/dist/browser-tools/analyze-site/detect-auth.js +10 -5
- package/dist/browser-tools/analyze-site/detect-auth.js.map +1 -1
- package/dist/browser-tools/analyze-site/index.d.ts +37 -8
- package/dist/browser-tools/analyze-site/index.d.ts.map +1 -1
- package/dist/browser-tools/analyze-site/index.js +67 -29
- package/dist/browser-tools/analyze-site/index.js.map +1 -1
- package/dist/browser-tools/analyze-site.d.ts.map +1 -1
- package/dist/browser-tools/analyze-site.js +9 -8
- package/dist/browser-tools/analyze-site.js.map +1 -1
- package/dist/browser-tools/enable-network-capture.d.ts +1 -0
- package/dist/browser-tools/enable-network-capture.d.ts.map +1 -1
- package/dist/browser-tools/enable-network-capture.js +10 -2
- package/dist/browser-tools/enable-network-capture.js.map +1 -1
- package/dist/browser-tools/execute-script.js +1 -1
- package/dist/browser-tools/execute-script.js.map +1 -1
- package/dist/browser-tools/export-har.d.ts +15 -0
- package/dist/browser-tools/export-har.d.ts.map +1 -0
- package/dist/browser-tools/export-har.js +187 -0
- package/dist/browser-tools/export-har.js.map +1 -0
- package/dist/browser-tools/extension-get-logs.d.ts +3 -3
- package/dist/browser-tools/get-console-logs.d.ts +4 -4
- package/dist/browser-tools/get-websocket-frames.d.ts +10 -0
- package/dist/browser-tools/get-websocket-frames.d.ts.map +1 -0
- package/dist/browser-tools/get-websocket-frames.js +27 -0
- package/dist/browser-tools/get-websocket-frames.js.map +1 -0
- package/dist/browser-tools/index.d.ts.map +1 -1
- package/dist/browser-tools/index.js +4 -0
- package/dist/browser-tools/index.js.map +1 -1
- package/dist/browser-tools/reload-extension.d.ts.map +1 -1
- package/dist/browser-tools/reload-extension.js +1 -3
- package/dist/browser-tools/reload-extension.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -22
- package/dist/config.js.map +1 -1
- package/dist/dev-mode.d.ts.map +1 -1
- package/dist/dev-mode.js +1 -2
- package/dist/dev-mode.js.map +1 -1
- package/dist/dev-proxy.d.ts +12 -0
- package/dist/dev-proxy.d.ts.map +1 -0
- package/dist/dev-proxy.js +227 -0
- package/dist/dev-proxy.js.map +1 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +6 -1
- package/dist/discovery.js.map +1 -1
- package/dist/extension-handlers.d.ts +1 -1
- package/dist/extension-handlers.d.ts.map +1 -1
- package/dist/extension-handlers.js +2 -2
- package/dist/extension-handlers.js.map +1 -1
- package/dist/extension-install.d.ts.map +1 -1
- package/dist/extension-install.js +6 -5
- package/dist/extension-install.js.map +1 -1
- package/dist/extension-protocol.d.ts +4 -2
- package/dist/extension-protocol.d.ts.map +1 -1
- package/dist/extension-protocol.js +25 -17
- package/dist/extension-protocol.js.map +1 -1
- package/dist/file-watcher.d.ts +1 -1
- package/dist/file-watcher.d.ts.map +1 -1
- package/dist/file-watcher.js +29 -10
- package/dist/file-watcher.js.map +1 -1
- package/dist/http-routes.d.ts +1 -1
- package/dist/http-routes.d.ts.map +1 -1
- package/dist/http-routes.js +8 -4
- package/dist/http-routes.js.map +1 -1
- package/dist/index.d.ts +12 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -55
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +20 -17
- package/dist/loader.js.map +1 -1
- package/dist/log-buffer.d.ts +3 -1
- package/dist/log-buffer.d.ts.map +1 -1
- package/dist/log-buffer.js +12 -3
- package/dist/log-buffer.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +2 -3
- package/dist/logger.js.map +1 -1
- package/dist/mcp-setup.d.ts +1 -1
- package/dist/mcp-setup.js +2 -2
- package/dist/mcp-tool-dispatch.d.ts +14 -1
- package/dist/mcp-tool-dispatch.d.ts.map +1 -1
- package/dist/mcp-tool-dispatch.js +4 -2
- package/dist/mcp-tool-dispatch.js.map +1 -1
- package/dist/permissions.d.ts.map +1 -1
- package/dist/permissions.js +5 -3
- package/dist/permissions.js.map +1 -1
- package/dist/plugin-management.d.ts +1 -1
- package/dist/plugin-management.d.ts.map +1 -1
- package/dist/plugin-management.js +53 -13
- package/dist/plugin-management.js.map +1 -1
- package/dist/reload.d.ts +6 -7
- package/dist/reload.d.ts.map +1 -1
- package/dist/reload.js +43 -15
- package/dist/reload.js.map +1 -1
- package/dist/resolver.d.ts +3 -3
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +15 -32
- package/dist/resolver.js.map +1 -1
- package/dist/sanitize-error.d.ts.map +1 -1
- package/dist/sanitize-error.js +10 -6
- package/dist/sanitize-error.js.map +1 -1
- package/dist/sdk-version.js +2 -2
- package/dist/sdk-version.js.map +1 -1
- package/dist/server-node.d.ts +9 -13
- package/dist/server-node.d.ts.map +1 -1
- package/dist/server-node.js +47 -18
- package/dist/server-node.js.map +1 -1
- package/dist/shutdown.d.ts +7 -6
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +13 -9
- package/dist/shutdown.js.map +1 -1
- package/dist/skip-confirmation.d.ts.map +1 -1
- package/dist/skip-confirmation.js +1 -2
- package/dist/skip-confirmation.js.map +1 -1
- package/dist/skip-npm-discovery.d.ts.map +1 -1
- package/dist/skip-npm-discovery.js +1 -2
- package/dist/skip-npm-discovery.js.map +1 -1
- package/dist/state.d.ts +1 -1
- package/dist/state.js +1 -1
- package/dist/version-check.d.ts +6 -4
- package/dist/version-check.d.ts.map +1 -1
- package/dist/version-check.js +39 -9
- package/dist/version-check.js.map +1 -1
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +6 -7
package/dist/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize-error.d.ts","sourceRoot":"","sources":["../src/sanitize-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,QAAA,MAAM,oBAAoB,GAAI,SAAS,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"sanitize-error.d.ts","sourceRoot":"","sources":["../src/sanitize-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,QAAA,MAAM,oBAAoB,GAAI,SAAS,MAAM,KAAG,MAsB/C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/sanitize-error.js
CHANGED
|
@@ -6,14 +6,18 @@
|
|
|
6
6
|
const MAX_LENGTH = 500;
|
|
7
7
|
const sanitizeErrorMessage = (message) => {
|
|
8
8
|
let sanitized = message
|
|
9
|
+
// Full URLs with protocol — must run before path regexes: the Windows path
|
|
10
|
+
// regex matches "[a-z]:/" which would match the "s:/" in "https://" or the
|
|
11
|
+
// "p:/" in "http://", and the Unix path regex would match the path portion,
|
|
12
|
+
// both leaving a partial URL like "htt[PATH]" instead of "[URL]"
|
|
13
|
+
.replace(/https?:\/\/[^\s,;)}\]]+/gi, '[URL]')
|
|
9
14
|
// Windows absolute paths: C:\path\to\file or C:/path/to/file
|
|
10
15
|
.replace(/[a-z]:[/\\][^\s,;)}\]]+/gi, '[PATH]')
|
|
11
|
-
// Unix absolute paths: /path/to/file
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.replace(/localhost:\d+/gi, '[LOCALHOST]')
|
|
16
|
+
// Unix absolute paths: /path/to/file — first segment must start with a letter to avoid
|
|
17
|
+
// false positives on numeric segments like "1/2" (fractions/ratios)
|
|
18
|
+
.replace(/\/[a-z][a-z0-9._-]*(?:\/[a-z0-9._-]+)*/gi, '[PATH]')
|
|
19
|
+
// localhost with optional port
|
|
20
|
+
.replace(/localhost(?::\d+)?/gi, '[LOCALHOST]')
|
|
17
21
|
// IPv4 addresses
|
|
18
22
|
.replace(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/g, '[IP]');
|
|
19
23
|
if (sanitized.length > MAX_LENGTH) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize-error.js","sourceRoot":"","sources":["../src/sanitize-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAU,EAAE;IACvD,IAAI,SAAS,GAAG,OAAO;QACrB,
|
|
1
|
+
{"version":3,"file":"sanitize-error.js","sourceRoot":"","sources":["../src/sanitize-error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAU,EAAE;IACvD,IAAI,SAAS,GAAG,OAAO;QACrB,2EAA2E;QAC3E,2EAA2E;QAC3E,4EAA4E;QAC5E,iEAAiE;SAChE,OAAO,CAAC,2BAA2B,EAAE,OAAO,CAAC;QAC9C,6DAA6D;SAC5D,OAAO,CAAC,2BAA2B,EAAE,QAAQ,CAAC;QAC/C,uFAAuF;QACvF,oEAAoE;SACnE,OAAO,CAAC,0CAA0C,EAAE,QAAQ,CAAC;QAC9D,+BAA+B;SAC9B,OAAO,CAAC,sBAAsB,EAAE,aAAa,CAAC;QAC/C,iBAAiB;SAChB,OAAO,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;IAE1D,IAAI,SAAS,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAClC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACzD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
package/dist/sdk-version.js
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* SDK compatibility: a plugin's sdkVersion (from its tools.json) must have a
|
|
7
7
|
* major.minor <= the server's SDK major.minor.
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { readFile } from 'node:fs/promises';
|
|
10
10
|
import { join, dirname } from 'node:path';
|
|
11
11
|
import { fileURLToPath } from 'node:url';
|
|
12
12
|
let sdkVersion = '0.0.0';
|
|
13
13
|
try {
|
|
14
14
|
const sdkPkgPath = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'plugin-sdk', 'package.json');
|
|
15
|
-
const pkgJson = await
|
|
15
|
+
const pkgJson = JSON.parse(await readFile(sdkPkgPath, 'utf-8'));
|
|
16
16
|
if (pkgJson !== null && typeof pkgJson === 'object' && 'version' in pkgJson && typeof pkgJson.version === 'string') {
|
|
17
17
|
sdkVersion = pkgJson.version;
|
|
18
18
|
}
|
package/dist/sdk-version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-version.js","sourceRoot":"","sources":["../src/sdk-version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sdk-version.js","sourceRoot":"","sources":["../src/sdk-version.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,IAAI,UAAU,GAAG,OAAO,CAAC;AAEzB,IAAI,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACzE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnH,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAC/B,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,uEAAuE;AACzE,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/server-node.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Node.js HTTP + WebSocket server
|
|
2
|
+
* Node.js HTTP + WebSocket server.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* node:http and the ws package. Converts between Node.js IncomingMessage /
|
|
4
|
+
* Uses node:http and the ws package. Converts between Node.js IncomingMessage /
|
|
6
5
|
* ServerResponse and the Web Standard Request / Response objects that the
|
|
7
6
|
* route handlers expect.
|
|
8
7
|
*
|
|
@@ -10,7 +9,7 @@
|
|
|
10
9
|
*/
|
|
11
10
|
import type { ServerAdapter } from './http-routes.js';
|
|
12
11
|
import type { WsHandle } from '@opentabs-dev/shared';
|
|
13
|
-
/** Configuration
|
|
12
|
+
/** Configuration for the Node.js HTTP + WebSocket server */
|
|
14
13
|
interface NodeServerOptions {
|
|
15
14
|
hostname: string;
|
|
16
15
|
port: number;
|
|
@@ -21,7 +20,7 @@ interface NodeServerOptions {
|
|
|
21
20
|
close: (ws: WsHandle) => void;
|
|
22
21
|
};
|
|
23
22
|
}
|
|
24
|
-
/** Return type
|
|
23
|
+
/** Return type for the Node.js server */
|
|
25
24
|
interface NodeServer {
|
|
26
25
|
port: number;
|
|
27
26
|
stop: () => void;
|
|
@@ -30,14 +29,11 @@ interface NodeServer {
|
|
|
30
29
|
* Create a Node.js HTTP + WebSocket server that presents the ServerAdapter
|
|
31
30
|
* interface to the MCP server route handlers.
|
|
32
31
|
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* Strategy: The 'upgrade' event constructs a Web Request, calls the fetch
|
|
39
|
-
* handler (which calls `adapter.upgrade()`), and if upgrade was requested,
|
|
40
|
-
* completes it via `wss.handleUpgrade()`.
|
|
32
|
+
* WebSocket upgrades are handled via the 'upgrade' event on the HTTP server,
|
|
33
|
+
* which is separate from normal request handling. The 'upgrade' event
|
|
34
|
+
* constructs a Web Request, calls the fetch handler (which calls
|
|
35
|
+
* `adapter.upgrade()`), and if upgrade was requested, completes it via
|
|
36
|
+
* `wss.handleUpgrade()`.
|
|
41
37
|
*/
|
|
42
38
|
declare const createNodeServer: (options: NodeServerOptions) => Promise<NodeServer>;
|
|
43
39
|
export type { NodeServer, NodeServerOptions };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-node.d.ts","sourceRoot":"","sources":["../src/server-node.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server-node.d.ts","sourceRoot":"","sources":["../src/server-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAiBrD,4DAA4D;AAC5D,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IAC9E,SAAS,EAAE;QACT,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAC;QAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,KAAK,IAAI,CAAC;QAC5E,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAC;KAC/B,CAAC;CACH;AAED,yCAAyC;AACzC,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AA8LD;;;;;;;;;GASG;AACH,QAAA,MAAM,gBAAgB,GAAI,SAAS,iBAAiB,KAAG,OAAO,CAAC,UAAU,CAsFrE,CAAC;AAEL,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/server-node.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Node.js HTTP + WebSocket server
|
|
2
|
+
* Node.js HTTP + WebSocket server.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* node:http and the ws package. Converts between Node.js IncomingMessage /
|
|
4
|
+
* Uses node:http and the ws package. Converts between Node.js IncomingMessage /
|
|
6
5
|
* ServerResponse and the Web Standard Request / Response objects that the
|
|
7
6
|
* route handlers expect.
|
|
8
7
|
*
|
|
@@ -12,6 +11,15 @@ import { log } from './logger.js';
|
|
|
12
11
|
import { WebSocketServer } from 'ws';
|
|
13
12
|
import { createServer } from 'node:http';
|
|
14
13
|
import { Readable } from 'node:stream';
|
|
14
|
+
/** Maximum HTTP request body size (10 MB, matching the WebSocket maxPayload) */
|
|
15
|
+
const MAX_BODY_SIZE = 10 * 1024 * 1024;
|
|
16
|
+
/** Thrown by collectBody when the incoming body exceeds MAX_BODY_SIZE */
|
|
17
|
+
class BodyTooLargeError extends Error {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(`Request body exceeds ${MAX_BODY_SIZE.toString()} byte limit`);
|
|
20
|
+
this.name = 'BodyTooLargeError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
15
23
|
/** Send a Web Response through a Node.js ServerResponse */
|
|
16
24
|
const sendResponse = (webResponse, res) => {
|
|
17
25
|
res.writeHead(webResponse.status, Object.fromEntries(webResponse.headers));
|
|
@@ -58,17 +66,24 @@ const toWebRequest = (req, body) => {
|
|
|
58
66
|
body: hasBody && body ? new Uint8Array(body) : undefined,
|
|
59
67
|
};
|
|
60
68
|
// Node.js 20+ requires duplex: 'half' for requests with a body.
|
|
61
|
-
// This property is not in bun-types' RequestInit, but this file only
|
|
62
|
-
// runs under Node.js.
|
|
63
69
|
if (hasBody) {
|
|
64
70
|
init['duplex'] = 'half';
|
|
65
71
|
}
|
|
66
72
|
return new Request(url, init);
|
|
67
73
|
};
|
|
68
|
-
/** Collect the full request body from an IncomingMessage */
|
|
74
|
+
/** Collect the full request body from an IncomingMessage, up to MAX_BODY_SIZE bytes */
|
|
69
75
|
const collectBody = (req) => new Promise((resolve, reject) => {
|
|
70
76
|
const chunks = [];
|
|
71
|
-
|
|
77
|
+
let totalSize = 0;
|
|
78
|
+
req.on('data', (chunk) => {
|
|
79
|
+
totalSize += chunk.length;
|
|
80
|
+
if (totalSize > MAX_BODY_SIZE) {
|
|
81
|
+
req.destroy();
|
|
82
|
+
reject(new BodyTooLargeError());
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
chunks.push(chunk);
|
|
86
|
+
});
|
|
72
87
|
req.on('end', () => resolve(Buffer.concat(chunks)));
|
|
73
88
|
req.on('error', reject);
|
|
74
89
|
});
|
|
@@ -91,6 +106,13 @@ const handleHttpRequest = (options, adapter, req, res) => {
|
|
|
91
106
|
}
|
|
92
107
|
}
|
|
93
108
|
catch (err) {
|
|
109
|
+
if (err instanceof BodyTooLargeError) {
|
|
110
|
+
if (!res.headersSent) {
|
|
111
|
+
res.writeHead(413);
|
|
112
|
+
res.end('Payload Too Large');
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
94
116
|
log.error('Unhandled error in HTTP handler:', err);
|
|
95
117
|
if (!res.headersSent) {
|
|
96
118
|
res.writeHead(500);
|
|
@@ -163,24 +185,31 @@ const handleWsUpgradeEvent = (options, adapter, wss, getUpgradeContext, setUpgra
|
|
|
163
185
|
* Create a Node.js HTTP + WebSocket server that presents the ServerAdapter
|
|
164
186
|
* interface to the MCP server route handlers.
|
|
165
187
|
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* Strategy: The 'upgrade' event constructs a Web Request, calls the fetch
|
|
172
|
-
* handler (which calls `adapter.upgrade()`), and if upgrade was requested,
|
|
173
|
-
* completes it via `wss.handleUpgrade()`.
|
|
188
|
+
* WebSocket upgrades are handled via the 'upgrade' event on the HTTP server,
|
|
189
|
+
* which is separate from normal request handling. The 'upgrade' event
|
|
190
|
+
* constructs a Web Request, calls the fetch handler (which calls
|
|
191
|
+
* `adapter.upgrade()`), and if upgrade was requested, completes it via
|
|
192
|
+
* `wss.handleUpgrade()`.
|
|
174
193
|
*/
|
|
175
194
|
const createNodeServer = (options) => new Promise((resolveServer, rejectServer) => {
|
|
176
|
-
const wss = new WebSocketServer({
|
|
195
|
+
const wss = new WebSocketServer({
|
|
196
|
+
noServer: true,
|
|
197
|
+
/** Matches MAX_MESSAGE_SIZE in extension-protocol.ts and MAX_BODY_SIZE above */
|
|
198
|
+
maxPayload: MAX_BODY_SIZE,
|
|
199
|
+
});
|
|
177
200
|
// The ws library emits 'headers' with the raw header lines just before
|
|
178
201
|
// sending the 101 response. We use this to inject custom headers
|
|
179
|
-
//
|
|
202
|
+
// from the route handler's upgrade call.
|
|
203
|
+
//
|
|
204
|
+
// Sec-WebSocket-Protocol is intentionally excluded here: ws selects the
|
|
205
|
+
// protocol automatically (first value from the client's requested list),
|
|
206
|
+
// so injecting it again would produce a duplicate header.
|
|
180
207
|
let pendingUpgradeHeaders = {};
|
|
181
208
|
wss.on('headers', (headers) => {
|
|
182
209
|
for (const [key, value] of Object.entries(pendingUpgradeHeaders)) {
|
|
183
|
-
|
|
210
|
+
if (key.toLowerCase() !== 'sec-websocket-protocol') {
|
|
211
|
+
headers.push(`${key}: ${value}`);
|
|
212
|
+
}
|
|
184
213
|
}
|
|
185
214
|
pendingUpgradeHeaders = {};
|
|
186
215
|
});
|
package/dist/server-node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-node.js","sourceRoot":"","sources":["../src/server-node.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server-node.js","sourceRoot":"","sources":["../src/server-node.ts"],"names":[],"mappings":"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"}
|
package/dist/shutdown.d.ts
CHANGED
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Installs SIGTERM and SIGINT handlers that perform orderly cleanup:
|
|
5
5
|
* 1. Reject all pending dispatches immediately (fast error for MCP clients)
|
|
6
|
-
* 2.
|
|
7
|
-
* 3. Stop
|
|
8
|
-
* 4.
|
|
9
|
-
* 5.
|
|
6
|
+
* 2. Reject all pending confirmations (mirrors WebSocket disconnect behavior)
|
|
7
|
+
* 3. Stop periodic session sweep timer
|
|
8
|
+
* 4. Stop file watchers (release OS handles)
|
|
9
|
+
* 5. Close extension WebSocket cleanly (so offscreen document reconnects)
|
|
10
|
+
* 6. Exit the process
|
|
10
11
|
*
|
|
11
|
-
* The handler is installed once on first load.
|
|
12
|
-
*
|
|
12
|
+
* The handler is installed once on first load. Signal handlers are not
|
|
13
|
+
* re-registered on hot reload (they survive across module re-evaluations
|
|
13
14
|
* because they reference state via the getter closure, not a stale capture).
|
|
14
15
|
*
|
|
15
16
|
* A globalThis flag prevents double-registration if index.ts is re-evaluated.
|
package/dist/shutdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;;;;;;GAOG;AACH,QAAA,MAAM,uBAAuB,GAAI,UAAU,MAAM,WAAW,KAAG,IA8C9D,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
package/dist/shutdown.js
CHANGED
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Installs SIGTERM and SIGINT handlers that perform orderly cleanup:
|
|
5
5
|
* 1. Reject all pending dispatches immediately (fast error for MCP clients)
|
|
6
|
-
* 2.
|
|
7
|
-
* 3. Stop
|
|
8
|
-
* 4.
|
|
9
|
-
* 5.
|
|
6
|
+
* 2. Reject all pending confirmations (mirrors WebSocket disconnect behavior)
|
|
7
|
+
* 3. Stop periodic session sweep timer
|
|
8
|
+
* 4. Stop file watchers (release OS handles)
|
|
9
|
+
* 5. Close extension WebSocket cleanly (so offscreen document reconnects)
|
|
10
|
+
* 6. Exit the process
|
|
10
11
|
*
|
|
11
|
-
* The handler is installed once on first load.
|
|
12
|
-
*
|
|
12
|
+
* The handler is installed once on first load. Signal handlers are not
|
|
13
|
+
* re-registered on hot reload (they survive across module re-evaluations
|
|
13
14
|
* because they reference state via the getter closure, not a stale capture).
|
|
14
15
|
*
|
|
15
16
|
* A globalThis flag prevents double-registration if index.ts is re-evaluated.
|
|
16
17
|
*/
|
|
18
|
+
import { rejectAllPendingConfirmations } from './extension-handlers.js';
|
|
17
19
|
import { stopFileWatching } from './file-watcher.js';
|
|
18
20
|
import { log } from './logger.js';
|
|
19
21
|
const SHUTDOWN_INSTALLED_KEY = '__opentabs_shutdown_installed__';
|
|
@@ -41,14 +43,16 @@ const installShutdownHandlers = (getState) => {
|
|
|
41
43
|
pending.reject(new Error('Server shutting down'));
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
|
-
// 2.
|
|
46
|
+
// 2. Reject all pending confirmations (mirrors WebSocket disconnect behavior)
|
|
47
|
+
rejectAllPendingConfirmations(state);
|
|
48
|
+
// 3. Stop periodic session sweep timer
|
|
45
49
|
if (state.sweepTimerId !== null) {
|
|
46
50
|
clearInterval(state.sweepTimerId);
|
|
47
51
|
state.sweepTimerId = null;
|
|
48
52
|
}
|
|
49
|
-
//
|
|
53
|
+
// 4. Stop file watchers (release OS handles)
|
|
50
54
|
stopFileWatching(state);
|
|
51
|
-
//
|
|
55
|
+
// 5. Close extension WebSocket cleanly
|
|
52
56
|
if (state.extensionWs) {
|
|
53
57
|
try {
|
|
54
58
|
state.extensionWs.close(1001, 'Server shutting down');
|
package/dist/shutdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../src/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAGlC,MAAM,sBAAsB,GAAG,iCAA0C,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,uBAAuB,GAAG,CAAC,QAA2B,EAAQ,EAAE;IACpE,IAAK,UAAsC,CAAC,sBAAsB,CAAC;QAAE,OAAO;IAC3E,UAAsC,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC;IAEvE,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAQ,EAAE;QACxC,GAAG,CAAC,IAAI,CAAC,YAAY,MAAM,6BAA6B,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QAEzB,kEAAkE;QAClE,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,iBAAiB,CAAC,IAAI,uBAAuB,CAAC,CAAC;YAC3E,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBACpD,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,8EAA8E;QAC9E,6BAA6B,CAAC,KAAK,CAAC,CAAC;QAErC,uCAAuC;QACvC,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAChC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAClC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,6CAA6C;QAC7C,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAExB,uCAAuC;QACvC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;YACxD,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-confirmation.d.ts","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"skip-confirmation.d.ts","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,QAAO,OAA8B,CAAC"}
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
* The config.json `skipConfirmation` field is checked separately at reload
|
|
11
11
|
* time and combined with this flag in state.skipConfirmation.
|
|
12
12
|
*/
|
|
13
|
-
|
|
14
|
-
const cliSkipConfirmation = getArgv().includes('--dangerously-skip-confirmation') || getEnv('OPENTABS_SKIP_CONFIRMATION') === '1';
|
|
13
|
+
const cliSkipConfirmation = process.argv.includes('--dangerously-skip-confirmation') || process.env['OPENTABS_SKIP_CONFIRMATION'] === '1';
|
|
15
14
|
/** Whether the CLI flag or env var requests confirmation bypass */
|
|
16
15
|
export const isCliSkipConfirmation = () => cliSkipConfirmation;
|
|
17
16
|
//# sourceMappingURL=skip-confirmation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-confirmation.js","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,
|
|
1
|
+
{"version":3,"file":"skip-confirmation.js","sourceRoot":"","sources":["../src/skip-confirmation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,mBAAmB,GACvB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,KAAK,GAAG,CAAC;AAEhH,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAY,EAAE,CAAC,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-npm-discovery.d.ts","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"skip-npm-discovery.d.ts","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,eAAO,MAAM,kBAAkB,QAAO,OAA2B,CAAC"}
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
* This is used by E2E tests to prevent globally-installed npm plugins
|
|
9
9
|
* on the developer's machine from polluting test isolation.
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
|
-
const skipNpmDiscovery = getEnv('OPENTABS_SKIP_NPM_DISCOVERY') === '1';
|
|
11
|
+
const skipNpmDiscovery = process.env['OPENTABS_SKIP_NPM_DISCOVERY'] === '1';
|
|
13
12
|
export const isSkipNpmDiscovery = () => skipNpmDiscovery;
|
|
14
13
|
//# sourceMappingURL=skip-npm-discovery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-npm-discovery.js","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,
|
|
1
|
+
{"version":3,"file":"skip-npm-discovery.js","sourceRoot":"","sources":["../src/skip-npm-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,KAAK,GAAG,CAAC;AAE5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAY,EAAE,CAAC,gBAAgB,CAAC"}
|
package/dist/state.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Fields that must survive hot reload (file watcher handles, timers) are stored
|
|
6
6
|
* here rather than at module scope, because module-level variables reset to
|
|
7
|
-
* fresh empty instances on each
|
|
7
|
+
* fresh empty instances on each hot reload re-evaluation.
|
|
8
8
|
*/
|
|
9
9
|
import type { BrowserToolDefinition } from './browser-tools/definition.js';
|
|
10
10
|
import type { PermissionsConfig } from './config.js';
|
package/dist/state.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Fields that must survive hot reload (file watcher handles, timers) are stored
|
|
6
6
|
* here rather than at module scope, because module-level variables reset to
|
|
7
|
-
* fresh empty instances on each
|
|
7
|
+
* fresh empty instances on each hot reload re-evaluation.
|
|
8
8
|
*/
|
|
9
9
|
import { appendAuditEntryToDisk } from './audit-disk.js';
|
|
10
10
|
/** Timeout for tool dispatch and browser command requests (ms) */
|
package/dist/version-check.d.ts
CHANGED
|
@@ -10,11 +10,12 @@ import type { ServerState } from './state.js';
|
|
|
10
10
|
* Query the latest published version of a package via `npm view`.
|
|
11
11
|
* Delegates auth to npm itself, which reads ~/.npmrc for tokens —
|
|
12
12
|
* this handles private/scoped packages without manual token management.
|
|
13
|
+
* Uses async `spawn` to avoid blocking the event loop.
|
|
13
14
|
*
|
|
14
15
|
* @param packageName - npm package name (e.g., 'opentabs-plugin-slack' or '@scope/opentabs-plugin-foo')
|
|
15
16
|
* @returns The latest version string, or null on failure
|
|
16
17
|
*/
|
|
17
|
-
export declare const fetchLatestVersion: (packageName: string) => string | null
|
|
18
|
+
export declare const fetchLatestVersion: (packageName: string) => Promise<string | null>;
|
|
18
19
|
/**
|
|
19
20
|
* Compare two semver version strings (major.minor.patch only).
|
|
20
21
|
* Strips prerelease suffixes (e.g., "1.0.0-beta.1" → [1, 0, 0]) and leading 'v'
|
|
@@ -27,10 +28,11 @@ export declare const fetchLatestVersion: (packageName: string) => string | null;
|
|
|
27
28
|
export declare const isNewer: (current: string, latest: string) => boolean;
|
|
28
29
|
/**
|
|
29
30
|
* Check all npm-installed plugins for newer versions on the registry.
|
|
30
|
-
* Runs `npm view`
|
|
31
|
-
* and stores results in `state.outdatedPlugins`.
|
|
31
|
+
* Runs `npm view` queries concurrently via Promise.allSettled, logs
|
|
32
|
+
* outdated entries, and stores results in `state.outdatedPlugins`.
|
|
33
|
+
* Skips local plugins.
|
|
32
34
|
*
|
|
33
35
|
* @param state - Server state containing the plugin registry and outdatedPlugins target
|
|
34
36
|
*/
|
|
35
|
-
export declare const checkForUpdates: (state: ServerState) => void
|
|
37
|
+
export declare const checkForUpdates: (state: ServerState) => Promise<void>;
|
|
36
38
|
//# sourceMappingURL=version-check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../src/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAQ9D;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAyCnF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,OAqBzD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAU,OAAO,WAAW,KAAG,OAAO,CAAC,IAAI,CA4DtE,CAAC"}
|
package/dist/version-check.js
CHANGED
|
@@ -6,18 +6,46 @@
|
|
|
6
6
|
* the background and stores results in server state.
|
|
7
7
|
*/
|
|
8
8
|
import { log } from './logger.js';
|
|
9
|
-
import {
|
|
9
|
+
import { platformExec, toErrorMessage } from '@opentabs-dev/shared';
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
/** Timeout for a single `npm view` query (10 seconds). */
|
|
12
|
+
const NPM_VIEW_TIMEOUT_MS = 10_000;
|
|
10
13
|
/**
|
|
11
14
|
* Query the latest published version of a package via `npm view`.
|
|
12
15
|
* Delegates auth to npm itself, which reads ~/.npmrc for tokens —
|
|
13
16
|
* this handles private/scoped packages without manual token management.
|
|
17
|
+
* Uses async `spawn` to avoid blocking the event loop.
|
|
14
18
|
*
|
|
15
19
|
* @param packageName - npm package name (e.g., 'opentabs-plugin-slack' or '@scope/opentabs-plugin-foo')
|
|
16
20
|
* @returns The latest version string, or null on failure
|
|
17
21
|
*/
|
|
18
|
-
export const fetchLatestVersion = (packageName) => {
|
|
22
|
+
export const fetchLatestVersion = async (packageName) => {
|
|
19
23
|
try {
|
|
20
|
-
const
|
|
24
|
+
const child = spawn(platformExec('npm'), ['view', packageName, 'version'], {
|
|
25
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
26
|
+
});
|
|
27
|
+
const stdoutChunks = [];
|
|
28
|
+
const stderrChunks = [];
|
|
29
|
+
child.stdout.on('data', (chunk) => stdoutChunks.push(chunk));
|
|
30
|
+
child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
|
|
31
|
+
const result = await new Promise((resolve, reject) => {
|
|
32
|
+
const timer = setTimeout(() => {
|
|
33
|
+
child.kill();
|
|
34
|
+
reject(new Error(`npm view timed out for ${packageName}`));
|
|
35
|
+
}, NPM_VIEW_TIMEOUT_MS);
|
|
36
|
+
child.on('error', err => {
|
|
37
|
+
clearTimeout(timer);
|
|
38
|
+
reject(err);
|
|
39
|
+
});
|
|
40
|
+
child.on('close', code => {
|
|
41
|
+
clearTimeout(timer);
|
|
42
|
+
resolve({
|
|
43
|
+
exitCode: code ?? 1,
|
|
44
|
+
stdout: Buffer.concat(stdoutChunks).toString(),
|
|
45
|
+
stderr: Buffer.concat(stderrChunks).toString(),
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
21
49
|
if (result.exitCode !== 0) {
|
|
22
50
|
log.debug(`npm view failed for ${packageName}: ${result.stderr.trim()}`);
|
|
23
51
|
return null;
|
|
@@ -62,21 +90,22 @@ export const isNewer = (current, latest) => {
|
|
|
62
90
|
};
|
|
63
91
|
/**
|
|
64
92
|
* Check all npm-installed plugins for newer versions on the registry.
|
|
65
|
-
* Runs `npm view`
|
|
66
|
-
* and stores results in `state.outdatedPlugins`.
|
|
93
|
+
* Runs `npm view` queries concurrently via Promise.allSettled, logs
|
|
94
|
+
* outdated entries, and stores results in `state.outdatedPlugins`.
|
|
95
|
+
* Skips local plugins.
|
|
67
96
|
*
|
|
68
97
|
* @param state - Server state containing the plugin registry and outdatedPlugins target
|
|
69
98
|
*/
|
|
70
|
-
export const checkForUpdates = (state) => {
|
|
99
|
+
export const checkForUpdates = async (state) => {
|
|
71
100
|
const npmPlugins = Array.from(state.registry.plugins.values()).filter(p => p.trustTier !== 'local' && p.npmPackageName);
|
|
72
101
|
if (npmPlugins.length === 0)
|
|
73
102
|
return;
|
|
74
103
|
log.info(`Checking ${npmPlugins.length} npm plugin(s) for updates...`);
|
|
75
|
-
const
|
|
104
|
+
const settled = await Promise.allSettled(npmPlugins.map(async (plugin) => {
|
|
76
105
|
const pkgName = plugin.npmPackageName;
|
|
77
106
|
if (!pkgName)
|
|
78
107
|
return { kind: 'unreachable' };
|
|
79
|
-
const latest = fetchLatestVersion(pkgName);
|
|
108
|
+
const latest = await fetchLatestVersion(pkgName);
|
|
80
109
|
if (!latest)
|
|
81
110
|
return { kind: 'unreachable' };
|
|
82
111
|
if (isNewer(plugin.version, latest)) {
|
|
@@ -91,7 +120,8 @@ export const checkForUpdates = (state) => {
|
|
|
91
120
|
};
|
|
92
121
|
}
|
|
93
122
|
return { kind: 'up-to-date' };
|
|
94
|
-
});
|
|
123
|
+
}));
|
|
124
|
+
const results = settled.map(s => (s.status === 'fulfilled' ? s.value : { kind: 'unreachable' }));
|
|
95
125
|
const outdated = [];
|
|
96
126
|
let unreachableCount = 0;
|
|
97
127
|
for (const result of results) {
|