@cgaspard/webappmcp 0.1.0
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/README.md +213 -0
- package/dist/browser.d.ts +3 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +20 -0
- package/dist/browser.js.map +1 -0
- package/dist/browser.min.js +2 -0
- package/dist/browser.min.js.map +1 -0
- package/dist/client/devtools.d.ts +28 -0
- package/dist/client/devtools.d.ts.map +1 -0
- package/dist/client/devtools.js +347 -0
- package/dist/client/devtools.js.map +1 -0
- package/dist/client/index.d.ts +47 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +655 -0
- package/dist/client/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +15 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/index.d.ts +30 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +323 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/mcp-server.d.ts +19 -0
- package/dist/middleware/mcp-server.d.ts.map +1 -0
- package/dist/middleware/mcp-server.js +149 -0
- package/dist/middleware/mcp-server.js.map +1 -0
- package/dist/middleware/mcp-socket-server.d.ts +29 -0
- package/dist/middleware/mcp-socket-server.d.ts.map +1 -0
- package/dist/middleware/mcp-socket-server.js +315 -0
- package/dist/middleware/mcp-socket-server.js.map +1 -0
- package/dist/middleware/mcp-sse-server.d.ts +26 -0
- package/dist/middleware/mcp-sse-server.d.ts.map +1 -0
- package/dist/middleware/mcp-sse-server.js +258 -0
- package/dist/middleware/mcp-sse-server.js.map +1 -0
- package/dist/middleware/tools/capture.d.ts +3 -0
- package/dist/middleware/tools/capture.d.ts.map +1 -0
- package/dist/middleware/tools/capture.js +54 -0
- package/dist/middleware/tools/capture.js.map +1 -0
- package/dist/middleware/tools/diagnostic.d.ts +3 -0
- package/dist/middleware/tools/diagnostic.d.ts.map +1 -0
- package/dist/middleware/tools/diagnostic.js +62 -0
- package/dist/middleware/tools/diagnostic.js.map +1 -0
- package/dist/middleware/tools/dom.d.ts +3 -0
- package/dist/middleware/tools/dom.d.ts.map +1 -0
- package/dist/middleware/tools/dom.js +84 -0
- package/dist/middleware/tools/dom.js.map +1 -0
- package/dist/middleware/tools/execute.d.ts +3 -0
- package/dist/middleware/tools/execute.d.ts.map +1 -0
- package/dist/middleware/tools/execute.js +30 -0
- package/dist/middleware/tools/execute.js.map +1 -0
- package/dist/middleware/tools/index.d.ts +3 -0
- package/dist/middleware/tools/index.d.ts.map +1 -0
- package/dist/middleware/tools/index.js +20 -0
- package/dist/middleware/tools/index.js.map +1 -0
- package/dist/middleware/tools/interaction.d.ts +3 -0
- package/dist/middleware/tools/interaction.d.ts.map +1 -0
- package/dist/middleware/tools/interaction.js +87 -0
- package/dist/middleware/tools/interaction.js.map +1 -0
- package/dist/middleware/tools/state.d.ts +3 -0
- package/dist/middleware/tools/state.d.ts.map +1 -0
- package/dist/middleware/tools/state.js +71 -0
- package/dist/middleware/tools/state.js.map +1 -0
- package/dist/middleware/types.d.ts +32 -0
- package/dist/middleware/types.d.ts.map +1 -0
- package/dist/middleware/types.js +3 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/server/cli.d.ts +3 -0
- package/dist/server/cli.d.ts.map +1 -0
- package/dist/server/cli.js +32 -0
- package/dist/server/cli.js.map +1 -0
- package/dist/server/index.d.ts +17 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +136 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/tools/capture.d.ts +3 -0
- package/dist/server/tools/capture.d.ts.map +1 -0
- package/dist/server/tools/capture.js +46 -0
- package/dist/server/tools/capture.js.map +1 -0
- package/dist/server/tools/dom.d.ts +3 -0
- package/dist/server/tools/dom.d.ts.map +1 -0
- package/dist/server/tools/dom.js +84 -0
- package/dist/server/tools/dom.js.map +1 -0
- package/dist/server/tools/index.d.ts +3 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +16 -0
- package/dist/server/tools/index.js.map +1 -0
- package/dist/server/tools/interaction.d.ts +3 -0
- package/dist/server/tools/interaction.d.ts.map +1 -0
- package/dist/server/tools/interaction.js +87 -0
- package/dist/server/tools/interaction.js.map +1 -0
- package/dist/server/tools/state.d.ts +3 -0
- package/dist/server/tools/state.d.ts.map +1 -0
- package/dist/server/tools/state.js +63 -0
- package/dist/server/tools/state.js.map +1 -0
- package/dist/server/types.d.ts +32 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +3 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server/websocket-manager.d.ts +17 -0
- package/dist/server/websocket-manager.d.ts.map +1 -0
- package/dist/server/websocket-manager.js +67 -0
- package/dist/server/websocket-manager.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.interactionTools = void 0;
|
|
4
|
+
exports.interactionTools = [
|
|
5
|
+
{
|
|
6
|
+
name: 'interaction_click',
|
|
7
|
+
description: 'Click on a DOM element',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
selector: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'CSS selector for the element to click',
|
|
14
|
+
},
|
|
15
|
+
button: {
|
|
16
|
+
type: 'string',
|
|
17
|
+
enum: ['left', 'right', 'middle'],
|
|
18
|
+
description: 'Mouse button to use',
|
|
19
|
+
default: 'left',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
required: ['selector'],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
name: 'interaction_type',
|
|
27
|
+
description: 'Type text into an input field',
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object',
|
|
30
|
+
properties: {
|
|
31
|
+
selector: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'CSS selector for the input element',
|
|
34
|
+
},
|
|
35
|
+
text: {
|
|
36
|
+
type: 'string',
|
|
37
|
+
description: 'Text to type',
|
|
38
|
+
},
|
|
39
|
+
clear: {
|
|
40
|
+
type: 'boolean',
|
|
41
|
+
description: 'Clear the field before typing',
|
|
42
|
+
default: false,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
required: ['selector', 'text'],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'interaction_scroll',
|
|
50
|
+
description: 'Scroll the page or an element',
|
|
51
|
+
inputSchema: {
|
|
52
|
+
type: 'object',
|
|
53
|
+
properties: {
|
|
54
|
+
selector: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'CSS selector for element to scroll (optional, scrolls page if not provided)',
|
|
57
|
+
},
|
|
58
|
+
direction: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
enum: ['up', 'down', 'left', 'right'],
|
|
61
|
+
description: 'Scroll direction',
|
|
62
|
+
},
|
|
63
|
+
amount: {
|
|
64
|
+
type: 'number',
|
|
65
|
+
description: 'Amount to scroll in pixels',
|
|
66
|
+
default: 100,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
required: ['direction'],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'interaction_hover',
|
|
74
|
+
description: 'Hover over a DOM element',
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {
|
|
78
|
+
selector: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'CSS selector for the element to hover over',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
required: ['selector'],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
//# sourceMappingURL=interaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../../src/server/tools/interaction.ts"],"names":[],"mappings":";;;AAEa,QAAA,gBAAgB,GAAqB;IAChD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uCAAuC;iBACrD;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;oBACjC,WAAW,EAAE,qBAAqB;oBAClC,OAAO,EAAE,MAAM;iBAChB;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oCAAoC;iBAClD;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,cAAc;iBAC5B;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,+BAA+B;oBAC5C,OAAO,EAAE,KAAK;iBACf;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;SAC/B;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6EAA6E;iBAC3F;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;oBACrC,WAAW,EAAE,kBAAkB;iBAChC;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4BAA4B;oBACzC,OAAO,EAAE,GAAG;iBACb;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,4CAA4C;iBAC1D;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/server/tools/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,UAAU,EAAE,cAAc,EA0DtC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stateTools = void 0;
|
|
4
|
+
exports.stateTools = [
|
|
5
|
+
{
|
|
6
|
+
name: 'state_get_variable',
|
|
7
|
+
description: 'Get the value of a JavaScript variable from the page context',
|
|
8
|
+
inputSchema: {
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
path: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description: 'Path to the variable (e.g., "window.myApp.config")',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
required: ['path'],
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'state_local_storage',
|
|
21
|
+
description: 'Read or write to localStorage',
|
|
22
|
+
inputSchema: {
|
|
23
|
+
type: 'object',
|
|
24
|
+
properties: {
|
|
25
|
+
operation: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
enum: ['get', 'set', 'remove', 'clear', 'getAll'],
|
|
28
|
+
description: 'Operation to perform',
|
|
29
|
+
},
|
|
30
|
+
key: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Storage key (required for get, set, remove)',
|
|
33
|
+
},
|
|
34
|
+
value: {
|
|
35
|
+
type: 'string',
|
|
36
|
+
description: 'Value to set (required for set operation)',
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
required: ['operation'],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'console_get_logs',
|
|
44
|
+
description: 'Retrieve console logs from the page',
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
level: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
enum: ['all', 'log', 'info', 'warn', 'error'],
|
|
51
|
+
description: 'Log level to filter by',
|
|
52
|
+
default: 'all',
|
|
53
|
+
},
|
|
54
|
+
limit: {
|
|
55
|
+
type: 'number',
|
|
56
|
+
description: 'Maximum number of logs to return',
|
|
57
|
+
default: 100,
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/server/tools/state.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAqB;IAC1C;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oDAAoD;iBAClE;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;oBACjD,WAAW,EAAE,sBAAsB;iBACpC;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,6CAA6C;iBAC3D;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2CAA2C;iBACzD;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;oBAC7C,WAAW,EAAE,wBAAwB;oBACrC,OAAO,EAAE,KAAK;iBACf;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;oBAC/C,OAAO,EAAE,GAAG;iBACb;aACF;SACF;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface ClientConnection {
|
|
2
|
+
id: string;
|
|
3
|
+
ws: any;
|
|
4
|
+
url: string;
|
|
5
|
+
isActive: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface ToolDefinition {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: 'object';
|
|
12
|
+
properties: Record<string, any>;
|
|
13
|
+
required?: string[];
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface DOMQueryResult {
|
|
17
|
+
elements: Array<{
|
|
18
|
+
selector: string;
|
|
19
|
+
tagName: string;
|
|
20
|
+
id?: string;
|
|
21
|
+
className?: string;
|
|
22
|
+
text?: string;
|
|
23
|
+
attributes: Record<string, string>;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface ScreenshotResult {
|
|
27
|
+
data: string;
|
|
28
|
+
mimeType: string;
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,GAAG,CAAC;IACR,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface WebSocketManagerConfig {
|
|
2
|
+
port: number;
|
|
3
|
+
authToken?: string;
|
|
4
|
+
onConnection: (clientId: string, ws: any) => void;
|
|
5
|
+
onDisconnection: (clientId: string) => void;
|
|
6
|
+
onMessage: (clientId: string, message: any) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare class WebSocketManager {
|
|
9
|
+
private wss;
|
|
10
|
+
private server;
|
|
11
|
+
private config;
|
|
12
|
+
constructor(config: WebSocketManagerConfig);
|
|
13
|
+
private setupWebSocketServer;
|
|
14
|
+
start(): Promise<void>;
|
|
15
|
+
stop(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=websocket-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-manager.d.ts","sourceRoot":"","sources":["../../src/server/websocket-manager.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;IAClD,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;CACrD;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,EAAE,sBAAsB;IAO1C,OAAO,CAAC,oBAAoB;IAwCtB,KAAK;IASL,IAAI;CASX"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketManager = void 0;
|
|
4
|
+
const ws_1 = require("ws");
|
|
5
|
+
const http_1 = require("http");
|
|
6
|
+
const uuid_1 = require("uuid");
|
|
7
|
+
class WebSocketManager {
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.server = (0, http_1.createServer)();
|
|
11
|
+
this.wss = new ws_1.WebSocketServer({ server: this.server });
|
|
12
|
+
this.setupWebSocketServer();
|
|
13
|
+
}
|
|
14
|
+
setupWebSocketServer() {
|
|
15
|
+
this.wss.on('connection', (ws, req) => {
|
|
16
|
+
const clientId = (0, uuid_1.v4)();
|
|
17
|
+
if (this.config.authToken) {
|
|
18
|
+
const authHeader = req.headers.authorization;
|
|
19
|
+
if (!authHeader || authHeader !== `Bearer ${this.config.authToken}`) {
|
|
20
|
+
ws.close(1008, 'Unauthorized');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
console.error(`Client connected: ${clientId}`);
|
|
25
|
+
this.config.onConnection(clientId, ws);
|
|
26
|
+
ws.on('message', (data) => {
|
|
27
|
+
try {
|
|
28
|
+
const message = JSON.parse(data.toString());
|
|
29
|
+
this.config.onMessage(clientId, message);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error('Failed to parse WebSocket message:', error);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
ws.on('close', () => {
|
|
36
|
+
console.error(`Client disconnected: ${clientId}`);
|
|
37
|
+
this.config.onDisconnection(clientId);
|
|
38
|
+
});
|
|
39
|
+
ws.on('error', (error) => {
|
|
40
|
+
console.error(`WebSocket error for client ${clientId}:`, error);
|
|
41
|
+
});
|
|
42
|
+
ws.send(JSON.stringify({
|
|
43
|
+
type: 'connected',
|
|
44
|
+
clientId,
|
|
45
|
+
}));
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async start() {
|
|
49
|
+
return new Promise((resolve) => {
|
|
50
|
+
this.server.listen(this.config.port, () => {
|
|
51
|
+
console.error(`WebSocket server listening on port ${this.config.port}`);
|
|
52
|
+
resolve();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async stop() {
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
this.wss.close(() => {
|
|
59
|
+
this.server.close(() => {
|
|
60
|
+
resolve();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.WebSocketManager = WebSocketManager;
|
|
67
|
+
//# sourceMappingURL=websocket-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-manager.js","sourceRoot":"","sources":["../../src/server/websocket-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cgaspard/webappmcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "WebApp MCP - Model Context Protocol integration for web applications",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"browser": "dist/browser.js",
|
|
9
|
+
"bin": {
|
|
10
|
+
"webappmcp-server": "./dist/server/cli.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "npm run build:typescript && npm run build:browser",
|
|
18
|
+
"build:typescript": "tsc",
|
|
19
|
+
"build:browser": "rollup -c",
|
|
20
|
+
"dev": "tsc --watch",
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"lint": "eslint src --ext .ts",
|
|
23
|
+
"typecheck": "tsc --noEmit"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@modelcontextprotocol/sdk": "^1.15.1",
|
|
27
|
+
"express": "^4.18.0",
|
|
28
|
+
"ws": "^8.0.0",
|
|
29
|
+
"cors": "^2.8.5",
|
|
30
|
+
"uuid": "^9.0.0",
|
|
31
|
+
"yargs": "^17.0.0"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"express": "^4.0.0"
|
|
35
|
+
},
|
|
36
|
+
"peerDependenciesMeta": {
|
|
37
|
+
"express": {
|
|
38
|
+
"optional": true
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/express": "^4.17.0",
|
|
43
|
+
"@types/ws": "^8.0.0",
|
|
44
|
+
"@types/cors": "^2.8.0",
|
|
45
|
+
"@types/uuid": "^9.0.0",
|
|
46
|
+
"@types/yargs": "^17.0.0",
|
|
47
|
+
"@rollup/plugin-typescript": "^11.0.0",
|
|
48
|
+
"@rollup/plugin-terser": "^0.4.0",
|
|
49
|
+
"rollup": "^4.0.0",
|
|
50
|
+
"tslib": "^2.6.0",
|
|
51
|
+
"jest": "^29.0.0",
|
|
52
|
+
"@types/jest": "^29.0.0",
|
|
53
|
+
"ts-jest": "^29.0.0"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=18.0.0"
|
|
57
|
+
},
|
|
58
|
+
"repository": {
|
|
59
|
+
"type": "git",
|
|
60
|
+
"url": "git+https://github.com/cgaspard/webappmcp.git",
|
|
61
|
+
"directory": "packages/webappmcp"
|
|
62
|
+
},
|
|
63
|
+
"keywords": [
|
|
64
|
+
"mcp",
|
|
65
|
+
"model-context-protocol",
|
|
66
|
+
"express",
|
|
67
|
+
"middleware",
|
|
68
|
+
"websocket",
|
|
69
|
+
"browser",
|
|
70
|
+
"ai",
|
|
71
|
+
"web-automation",
|
|
72
|
+
"dom",
|
|
73
|
+
"testing"
|
|
74
|
+
],
|
|
75
|
+
"author": "cgaspard",
|
|
76
|
+
"license": "MIT"
|
|
77
|
+
}
|