cbrowser 18.3.6 → 18.3.7
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/cli.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CBrowser - Cognitive Browser Automation
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2026 WF Media (Alexandria Eden)
|
|
6
|
+
* Email: alexandria.shai.eden@gmail.com
|
|
7
|
+
*
|
|
8
|
+
* This source code is licensed under the Business Source License 1.1
|
|
9
|
+
* found in the LICENSE file in the root directory of this source tree.
|
|
10
|
+
*
|
|
11
|
+
* Non-production use is permitted. Production use requires a commercial license.
|
|
12
|
+
* See LICENSE for full terms.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* CBrowser MCP Server with Native SDK OAuth Authentication
|
|
16
|
+
*
|
|
17
|
+
* Uses the official MCP SDK auth router (Express-based) with ProxyOAuthServerProvider
|
|
18
|
+
* for RFC-compliant OAuth 2.1 integration with Auth0 or other providers.
|
|
19
|
+
*
|
|
20
|
+
* Run with: cbrowser mcp-native-auth
|
|
21
|
+
* Or: npx cbrowser mcp-native-auth
|
|
22
|
+
*
|
|
23
|
+
* Environment variables:
|
|
24
|
+
* PORT - Port to listen on (default: 3000)
|
|
25
|
+
* HOST - Host to bind to (default: 0.0.0.0)
|
|
26
|
+
* MCP_SERVER_URL - Public URL of this server (required for OAuth metadata)
|
|
27
|
+
*
|
|
28
|
+
* Auth0 OAuth Environment Variables:
|
|
29
|
+
* AUTH0_DOMAIN - Your Auth0 tenant domain (e.g., 'your-tenant.auth0.com')
|
|
30
|
+
* AUTH0_AUDIENCE - API audience/identifier (e.g., 'https://your-server.com')
|
|
31
|
+
* AUTH0_CLIENT_ID - Optional: Client ID for static registration
|
|
32
|
+
*/
|
|
33
|
+
import express from "express";
|
|
34
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
35
|
+
import { ProxyOAuthServerProvider } from "@modelcontextprotocol/sdk/server/auth/providers/proxyProvider.js";
|
|
36
|
+
declare function createMcpServer(): McpServer;
|
|
37
|
+
declare function createProxyOAuthProvider(): ProxyOAuthServerProvider | null;
|
|
38
|
+
declare function createApp(): express.Application;
|
|
39
|
+
export { createApp, createMcpServer, createProxyOAuthProvider };
|
|
40
|
+
//# sourceMappingURL=mcp-server-native-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-native-auth.d.ts","sourceRoot":"","sources":["../src/mcp-server-native-auth.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,OAA4C,MAAM,SAAS,CAAC;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,wBAAwB,EAAqB,MAAM,kEAAkE,CAAC;AAmJ/H,iBAAS,eAAe,IAAI,SAAS,CAoFpC;AAMD,iBAAS,wBAAwB,IAAI,wBAAwB,GAAG,IAAI,CAiCnE;AAMD,iBAAS,SAAS,IAAI,OAAO,CAAC,WAAW,CA2FxC;AA+DD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CBrowser - Cognitive Browser Automation
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2026 WF Media (Alexandria Eden)
|
|
6
|
+
* Email: alexandria.shai.eden@gmail.com
|
|
7
|
+
*
|
|
8
|
+
* This source code is licensed under the Business Source License 1.1
|
|
9
|
+
* found in the LICENSE file in the root directory of this source tree.
|
|
10
|
+
*
|
|
11
|
+
* Non-production use is permitted. Production use requires a commercial license.
|
|
12
|
+
* See LICENSE for full terms.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* CBrowser MCP Server with Native SDK OAuth Authentication
|
|
16
|
+
*
|
|
17
|
+
* Uses the official MCP SDK auth router (Express-based) with ProxyOAuthServerProvider
|
|
18
|
+
* for RFC-compliant OAuth 2.1 integration with Auth0 or other providers.
|
|
19
|
+
*
|
|
20
|
+
* Run with: cbrowser mcp-native-auth
|
|
21
|
+
* Or: npx cbrowser mcp-native-auth
|
|
22
|
+
*
|
|
23
|
+
* Environment variables:
|
|
24
|
+
* PORT - Port to listen on (default: 3000)
|
|
25
|
+
* HOST - Host to bind to (default: 0.0.0.0)
|
|
26
|
+
* MCP_SERVER_URL - Public URL of this server (required for OAuth metadata)
|
|
27
|
+
*
|
|
28
|
+
* Auth0 OAuth Environment Variables:
|
|
29
|
+
* AUTH0_DOMAIN - Your Auth0 tenant domain (e.g., 'your-tenant.auth0.com')
|
|
30
|
+
* AUTH0_AUDIENCE - API audience/identifier (e.g., 'https://your-server.com')
|
|
31
|
+
* AUTH0_CLIENT_ID - Optional: Client ID for static registration
|
|
32
|
+
*/
|
|
33
|
+
import express from "express";
|
|
34
|
+
import { createServer } from "node:http";
|
|
35
|
+
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
36
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
37
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
38
|
+
import { mcpAuthRouter } from "@modelcontextprotocol/sdk/server/auth/router.js";
|
|
39
|
+
import { ProxyOAuthServerProvider } from "@modelcontextprotocol/sdk/server/auth/providers/proxyProvider.js";
|
|
40
|
+
import { z } from "zod";
|
|
41
|
+
import { CBrowser } from "./browser.js";
|
|
42
|
+
import { ensureDirectories, getStatusInfo, getSessionId } from "./config.js";
|
|
43
|
+
// Version from package.json
|
|
44
|
+
const VERSION = "16.14.5";
|
|
45
|
+
// =========================================================================
|
|
46
|
+
// Configuration
|
|
47
|
+
// =========================================================================
|
|
48
|
+
const PORT = parseInt(process.env.PORT || "3000", 10);
|
|
49
|
+
const HOST = process.env.HOST || "0.0.0.0";
|
|
50
|
+
const SERVER_URL = process.env.MCP_SERVER_URL || `http://localhost:${PORT}`;
|
|
51
|
+
// Token cache to avoid hitting Auth0 rate limits
|
|
52
|
+
const tokenCache = new Map();
|
|
53
|
+
const TOKEN_CACHE_TTL = 30 * 60 * 1000; // 30 minutes
|
|
54
|
+
let auth0Config = null;
|
|
55
|
+
function getAuth0Config() {
|
|
56
|
+
const domain = process.env.AUTH0_DOMAIN;
|
|
57
|
+
const audience = process.env.AUTH0_AUDIENCE;
|
|
58
|
+
if (!domain || !audience) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
if (!auth0Config || auth0Config.domain !== domain) {
|
|
62
|
+
auth0Config = {
|
|
63
|
+
domain,
|
|
64
|
+
audience,
|
|
65
|
+
clientId: process.env.AUTH0_CLIENT_ID,
|
|
66
|
+
jwks: createRemoteJWKSet(new URL(`https://${domain}/.well-known/jwks.json`)),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return auth0Config;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Validate Auth0 token - supports both JWT and opaque tokens with caching
|
|
73
|
+
*/
|
|
74
|
+
async function validateAuth0Token(token) {
|
|
75
|
+
const config = getAuth0Config();
|
|
76
|
+
if (!config) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
// Check cache first (use first 32 chars of token as key for security)
|
|
80
|
+
const cacheKey = token.substring(0, 32);
|
|
81
|
+
const cached = tokenCache.get(cacheKey);
|
|
82
|
+
if (cached && cached.expires > Date.now()) {
|
|
83
|
+
return {
|
|
84
|
+
token,
|
|
85
|
+
clientId: cached.payload.azp || "unknown",
|
|
86
|
+
scopes: cached.payload.scope?.split(" ") || [],
|
|
87
|
+
expiresAt: cached.payload.exp ? cached.payload.exp * 1000 : undefined,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
const tokenParts = token.split(".");
|
|
91
|
+
// If it's a proper JWT (3 parts), validate locally
|
|
92
|
+
if (tokenParts.length === 3) {
|
|
93
|
+
try {
|
|
94
|
+
const { payload } = await jwtVerify(token, config.jwks, {
|
|
95
|
+
issuer: `https://${config.domain}/`,
|
|
96
|
+
audience: config.audience,
|
|
97
|
+
});
|
|
98
|
+
console.log("[Auth] JWT validated successfully for subject:", payload.sub);
|
|
99
|
+
// Cache the result
|
|
100
|
+
tokenCache.set(cacheKey, { payload, expires: Date.now() + TOKEN_CACHE_TTL });
|
|
101
|
+
return {
|
|
102
|
+
token,
|
|
103
|
+
clientId: payload.azp || "unknown",
|
|
104
|
+
scopes: payload.scope?.split(" ") || [],
|
|
105
|
+
expiresAt: payload.exp ? payload.exp * 1000 : undefined,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error("[Auth] JWT validation failed:", error instanceof Error ? error.message : error);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// For opaque/JWE tokens, validate via Auth0's userinfo endpoint
|
|
114
|
+
console.log("[Auth] Opaque token detected, validating via Auth0 userinfo...");
|
|
115
|
+
try {
|
|
116
|
+
const response = await fetch(`https://${config.domain}/userinfo`, {
|
|
117
|
+
headers: {
|
|
118
|
+
Authorization: `Bearer ${token}`,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
if (response.ok) {
|
|
122
|
+
const userinfo = await response.json();
|
|
123
|
+
console.log("[Auth] Token validated via userinfo for:", userinfo.sub || userinfo.email);
|
|
124
|
+
// Cache the result
|
|
125
|
+
tokenCache.set(cacheKey, { payload: userinfo, expires: Date.now() + TOKEN_CACHE_TTL });
|
|
126
|
+
return {
|
|
127
|
+
token,
|
|
128
|
+
clientId: userinfo.sub || "unknown",
|
|
129
|
+
scopes: [],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.error("[Auth] Userinfo validation failed:", response.status, await response.text());
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error("[Auth] Userinfo request failed:", error instanceof Error ? error.message : error);
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// =========================================================================
|
|
143
|
+
// Browser Instance Management
|
|
144
|
+
// =========================================================================
|
|
145
|
+
let browserInstance = null;
|
|
146
|
+
async function getBrowser() {
|
|
147
|
+
if (!browserInstance) {
|
|
148
|
+
browserInstance = new CBrowser({ headless: true });
|
|
149
|
+
await browserInstance.launch();
|
|
150
|
+
}
|
|
151
|
+
return browserInstance;
|
|
152
|
+
}
|
|
153
|
+
// =========================================================================
|
|
154
|
+
// Create MCP Server with Tools
|
|
155
|
+
// =========================================================================
|
|
156
|
+
function createMcpServer() {
|
|
157
|
+
const server = new McpServer({
|
|
158
|
+
name: "cbrowser",
|
|
159
|
+
version: VERSION,
|
|
160
|
+
});
|
|
161
|
+
// Register basic tools
|
|
162
|
+
server.tool("status", "Get CBrowser environment status", {}, async () => {
|
|
163
|
+
const info = await getStatusInfo(VERSION);
|
|
164
|
+
return {
|
|
165
|
+
content: [{ type: "text", text: JSON.stringify(info, null, 2) }],
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
server.tool("navigate", "Navigate to a URL", {
|
|
169
|
+
url: z.string().describe("URL to navigate to"),
|
|
170
|
+
}, async ({ url }) => {
|
|
171
|
+
const browser = await getBrowser();
|
|
172
|
+
await browser.navigate(url);
|
|
173
|
+
return {
|
|
174
|
+
content: [{ type: "text", text: `Navigated to ${url}` }],
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
server.tool("screenshot", "Take a screenshot of the current page", {
|
|
178
|
+
name: z.string().optional().describe("Screenshot filename"),
|
|
179
|
+
}, async ({ name }) => {
|
|
180
|
+
const browser = await getBrowser();
|
|
181
|
+
const paths = ensureDirectories();
|
|
182
|
+
const filename = name || `screenshot_${Date.now()}.png`;
|
|
183
|
+
const filepath = `${paths.screenshotsDir}/${filename}`;
|
|
184
|
+
await browser.screenshot(filepath);
|
|
185
|
+
return {
|
|
186
|
+
content: [{ type: "text", text: `Screenshot saved to ${filepath} (session: ${paths.sessionId})` }],
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
server.tool("click", "Click an element on the page", {
|
|
190
|
+
selector: z.string().describe("CSS selector or natural language description"),
|
|
191
|
+
}, async ({ selector }) => {
|
|
192
|
+
const browser = await getBrowser();
|
|
193
|
+
await browser.click(selector);
|
|
194
|
+
return {
|
|
195
|
+
content: [{ type: "text", text: `Clicked: ${selector}` }],
|
|
196
|
+
};
|
|
197
|
+
});
|
|
198
|
+
server.tool("fill", "Fill a form field", {
|
|
199
|
+
selector: z.string().describe("CSS selector or natural language description"),
|
|
200
|
+
value: z.string().describe("Value to fill"),
|
|
201
|
+
}, async ({ selector, value }) => {
|
|
202
|
+
const browser = await getBrowser();
|
|
203
|
+
await browser.fill(selector, value);
|
|
204
|
+
return {
|
|
205
|
+
content: [{ type: "text", text: `Filled ${selector} with value` }],
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
return server;
|
|
209
|
+
}
|
|
210
|
+
// =========================================================================
|
|
211
|
+
// Proxy OAuth Provider Setup
|
|
212
|
+
// =========================================================================
|
|
213
|
+
function createProxyOAuthProvider() {
|
|
214
|
+
const config = getAuth0Config();
|
|
215
|
+
if (!config) {
|
|
216
|
+
console.log("[Auth] No Auth0 configuration found, auth disabled");
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
const options = {
|
|
220
|
+
endpoints: {
|
|
221
|
+
authorizationUrl: `https://${config.domain}/authorize`,
|
|
222
|
+
tokenUrl: `https://${config.domain}/oauth/token`,
|
|
223
|
+
revocationUrl: `https://${config.domain}/oauth/revoke`,
|
|
224
|
+
registrationUrl: `https://${config.domain}/oidc/register`,
|
|
225
|
+
},
|
|
226
|
+
verifyAccessToken: async (token) => {
|
|
227
|
+
const result = await validateAuth0Token(token);
|
|
228
|
+
if (!result) {
|
|
229
|
+
throw new Error("Invalid access token");
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
},
|
|
233
|
+
getClient: async (clientId) => {
|
|
234
|
+
// For dynamic registration, we trust Auth0 to manage clients
|
|
235
|
+
// Return basic info for any client ID that Auth0 issued
|
|
236
|
+
return {
|
|
237
|
+
client_id: clientId,
|
|
238
|
+
client_name: "CBrowser Client",
|
|
239
|
+
redirect_uris: [],
|
|
240
|
+
};
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
return new ProxyOAuthServerProvider(options);
|
|
244
|
+
}
|
|
245
|
+
// =========================================================================
|
|
246
|
+
// Express App Setup
|
|
247
|
+
// =========================================================================
|
|
248
|
+
function createApp() {
|
|
249
|
+
const app = express();
|
|
250
|
+
// Trust proxy for accurate IP behind reverse proxy
|
|
251
|
+
app.set("trust proxy", true);
|
|
252
|
+
// CORS middleware
|
|
253
|
+
app.use((req, res, next) => {
|
|
254
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
255
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
256
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, MCP-Session-ID, X-API-Key");
|
|
257
|
+
res.setHeader("Access-Control-Expose-Headers", "MCP-Session-ID");
|
|
258
|
+
if (req.method === "OPTIONS") {
|
|
259
|
+
res.status(200).end();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
next();
|
|
263
|
+
});
|
|
264
|
+
// Health check (always available)
|
|
265
|
+
app.get("/health", (_req, res) => {
|
|
266
|
+
res.json({
|
|
267
|
+
status: "ok",
|
|
268
|
+
version: VERSION,
|
|
269
|
+
session: getSessionId(),
|
|
270
|
+
timestamp: new Date().toISOString(),
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
// Server info (always available)
|
|
274
|
+
app.get("/info", (_req, res) => {
|
|
275
|
+
res.json({
|
|
276
|
+
name: "CBrowser MCP Server (Native Auth)",
|
|
277
|
+
version: VERSION,
|
|
278
|
+
description: "Cognitive Browser automation with native MCP SDK OAuth",
|
|
279
|
+
session: getSessionId(),
|
|
280
|
+
authEnabled: !!getAuth0Config(),
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
// Setup OAuth with native MCP SDK auth router
|
|
284
|
+
const provider = createProxyOAuthProvider();
|
|
285
|
+
if (provider) {
|
|
286
|
+
const serverUrl = new URL(SERVER_URL);
|
|
287
|
+
const config = getAuth0Config();
|
|
288
|
+
// Full OAuth server mode - proxies to Auth0
|
|
289
|
+
const authOptions = {
|
|
290
|
+
provider,
|
|
291
|
+
issuerUrl: new URL(`https://${config.domain}`),
|
|
292
|
+
baseUrl: serverUrl,
|
|
293
|
+
serviceDocumentationUrl: new URL("https://github.com/alexandriashai/cbrowser#readme"),
|
|
294
|
+
scopesSupported: ["openid", "profile", "cbrowser:read", "cbrowser:write"],
|
|
295
|
+
resourceName: "CBrowser MCP Server",
|
|
296
|
+
resourceServerUrl: serverUrl,
|
|
297
|
+
};
|
|
298
|
+
app.use(mcpAuthRouter(authOptions));
|
|
299
|
+
console.log("[Auth] Native MCP SDK OAuth router installed");
|
|
300
|
+
console.log(`[Auth] Authorization endpoint: ${serverUrl.href}authorize`);
|
|
301
|
+
console.log(`[Auth] Token endpoint: ${serverUrl.href}token`);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
// No auth - expose protected resource metadata pointing to nothing
|
|
305
|
+
console.log("[Auth] No authentication configured - server is open");
|
|
306
|
+
}
|
|
307
|
+
// MCP endpoint
|
|
308
|
+
app.all("/mcp", express.raw({ type: "*/*" }), async (req, res) => {
|
|
309
|
+
try {
|
|
310
|
+
const transport = new StreamableHTTPServerTransport({
|
|
311
|
+
sessionIdGenerator: () => getSessionId(),
|
|
312
|
+
});
|
|
313
|
+
const server = createMcpServer();
|
|
314
|
+
await server.connect(transport);
|
|
315
|
+
// Handle the request
|
|
316
|
+
await transport.handleRequest(req, res, req.body);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
console.error("[MCP] Error handling request:", error);
|
|
320
|
+
res.status(500).json({ error: "Internal server error" });
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
// Root redirects to info
|
|
324
|
+
app.get("/", (_req, res) => {
|
|
325
|
+
res.redirect("/info");
|
|
326
|
+
});
|
|
327
|
+
return app;
|
|
328
|
+
}
|
|
329
|
+
// =========================================================================
|
|
330
|
+
// Main Entry Point
|
|
331
|
+
// =========================================================================
|
|
332
|
+
async function main() {
|
|
333
|
+
console.log(`
|
|
334
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
335
|
+
║ CBrowser MCP Server (Native Auth) ║
|
|
336
|
+
║ v${VERSION} ║
|
|
337
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
338
|
+
`);
|
|
339
|
+
// Ensure directories exist
|
|
340
|
+
const paths = ensureDirectories();
|
|
341
|
+
console.log(`[Config] Data directory: ${paths.dataDir}`);
|
|
342
|
+
console.log(`[Config] Session ID: ${paths.sessionId}`);
|
|
343
|
+
console.log(`[Config] Screenshots: ${paths.screenshotsDir}`);
|
|
344
|
+
// Create and start Express app
|
|
345
|
+
const app = createApp();
|
|
346
|
+
const server = createServer(app);
|
|
347
|
+
server.listen(PORT, HOST, () => {
|
|
348
|
+
console.log(`
|
|
349
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
350
|
+
║ MCP Server running at: http://${HOST}:${PORT}
|
|
351
|
+
║ Health check: http://${HOST}:${PORT}/health
|
|
352
|
+
║ MCP endpoint: http://${HOST}:${PORT}/mcp
|
|
353
|
+
║ Auth mode: ${getAuth0Config() ? "OAuth 2.1 (Auth0)" : "OPEN (no auth)"}
|
|
354
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
355
|
+
`);
|
|
356
|
+
});
|
|
357
|
+
// Graceful shutdown
|
|
358
|
+
process.on("SIGINT", async () => {
|
|
359
|
+
console.log("\n[Server] Shutting down...");
|
|
360
|
+
if (browserInstance) {
|
|
361
|
+
await browserInstance.close();
|
|
362
|
+
}
|
|
363
|
+
server.close();
|
|
364
|
+
process.exit(0);
|
|
365
|
+
});
|
|
366
|
+
process.on("SIGTERM", async () => {
|
|
367
|
+
console.log("\n[Server] Terminating...");
|
|
368
|
+
if (browserInstance) {
|
|
369
|
+
await browserInstance.close();
|
|
370
|
+
}
|
|
371
|
+
server.close();
|
|
372
|
+
process.exit(0);
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
// Run if executed directly
|
|
376
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
377
|
+
main().catch((error) => {
|
|
378
|
+
console.error("[Fatal]", error);
|
|
379
|
+
process.exit(1);
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
export { createApp, createMcpServer, createProxyOAuthProvider };
|
|
383
|
+
//# sourceMappingURL=mcp-server-native-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-native-auth.js","sourceRoot":"","sources":["../src/mcp-server-native-auth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cbrowser",
|
|
3
|
-
"version": "18.3.
|
|
3
|
+
"version": "18.3.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Cognitive browser automation that thinks like your users—and helps AI agents navigate too. Simulate real user cognition with abandonment detection, constitutional safety, chaos engineering, and UX friction discovery. Sites that pass CBrowser's cognitive tests are easier for both humans and AI agents to navigate.",
|
|
6
6
|
"main": "dist/index.js",
|