@webmcp-bridge/playwright 0.4.2 → 0.5.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/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +111 -1
- package/dist/gateway.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -2
package/dist/gateway.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EACV,8BAA8B,EAE9B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EACV,8BAA8B,EAE9B,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAsKpB,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,iBAAiB,CAAC,CA+M5B;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtE"}
|
package/dist/gateway.js
CHANGED
|
@@ -28,12 +28,26 @@ const INJECT_SCRIPT = String.raw `
|
|
|
28
28
|
}
|
|
29
29
|
return await navAny.modelContext.callTool(String(name || ""), input || {});
|
|
30
30
|
},
|
|
31
|
+
listResources: async () => {
|
|
32
|
+
if (typeof navAny.modelContext.listResources === "function") {
|
|
33
|
+
const nativeResources = await navAny.modelContext.listResources();
|
|
34
|
+
return Array.isArray(nativeResources) ? nativeResources : [];
|
|
35
|
+
}
|
|
36
|
+
return [];
|
|
37
|
+
},
|
|
38
|
+
readResource: async (uri) => {
|
|
39
|
+
if (typeof navAny.modelContext.readResource !== "function") {
|
|
40
|
+
throw new Error("native modelContext readResource is not available");
|
|
41
|
+
}
|
|
42
|
+
return await navAny.modelContext.readResource(String(uri || ""));
|
|
43
|
+
},
|
|
31
44
|
};
|
|
32
45
|
globalAny.__WEBMCP_BRIDGE_MODE__ = "native";
|
|
33
46
|
return;
|
|
34
47
|
}
|
|
35
48
|
|
|
36
49
|
const tools = new Map();
|
|
50
|
+
const resources = new Map();
|
|
37
51
|
const contexts = [];
|
|
38
52
|
|
|
39
53
|
const modelContext = {
|
|
@@ -43,6 +57,7 @@ const INJECT_SCRIPT = String.raw `
|
|
|
43
57
|
clearContext: async () => {
|
|
44
58
|
contexts.splice(0, contexts.length);
|
|
45
59
|
tools.clear();
|
|
60
|
+
resources.clear();
|
|
46
61
|
},
|
|
47
62
|
registerTool: async (tool) => {
|
|
48
63
|
const name = tool && typeof tool.name === "string" ? tool.name : "";
|
|
@@ -57,6 +72,16 @@ const INJECT_SCRIPT = String.raw `
|
|
|
57
72
|
unregisterTool: async (name) => {
|
|
58
73
|
tools.delete(String(name || ""));
|
|
59
74
|
},
|
|
75
|
+
registerResource: async (resource) => {
|
|
76
|
+
const uri = resource && typeof resource.uri === "string" ? resource.uri : "";
|
|
77
|
+
if (!uri) {
|
|
78
|
+
throw new Error("resource.uri is required");
|
|
79
|
+
}
|
|
80
|
+
resources.set(uri, resource);
|
|
81
|
+
},
|
|
82
|
+
unregisterResource: async (uri) => {
|
|
83
|
+
resources.delete(String(uri || ""));
|
|
84
|
+
},
|
|
60
85
|
listTools: async () =>
|
|
61
86
|
Array.from(tools.values()).map((tool) => {
|
|
62
87
|
const output = {
|
|
@@ -69,6 +94,22 @@ const INJECT_SCRIPT = String.raw `
|
|
|
69
94
|
}
|
|
70
95
|
return output;
|
|
71
96
|
}),
|
|
97
|
+
listResources: async () =>
|
|
98
|
+
Array.from(resources.values()).map((resource) => {
|
|
99
|
+
const output = {
|
|
100
|
+
uri: resource.uri,
|
|
101
|
+
};
|
|
102
|
+
if (typeof resource.name === "string" && resource.name.trim()) {
|
|
103
|
+
output.name = resource.name;
|
|
104
|
+
}
|
|
105
|
+
if (typeof resource.description === "string" && resource.description.trim()) {
|
|
106
|
+
output.description = resource.description;
|
|
107
|
+
}
|
|
108
|
+
if (typeof resource.mimeType === "string" && resource.mimeType.trim()) {
|
|
109
|
+
output.mimeType = resource.mimeType;
|
|
110
|
+
}
|
|
111
|
+
return output;
|
|
112
|
+
}),
|
|
72
113
|
callTool: async (name, input) => {
|
|
73
114
|
const local = tools.get(String(name || ""));
|
|
74
115
|
if (local && typeof local.execute === "function") {
|
|
@@ -79,6 +120,18 @@ const INJECT_SCRIPT = String.raw `
|
|
|
79
120
|
}
|
|
80
121
|
return await globalAny.__WEBMCP_BRIDGE_CALL__(String(name || ""), input || {});
|
|
81
122
|
},
|
|
123
|
+
readResource: async (uri) => {
|
|
124
|
+
const local = resources.get(String(uri || ""));
|
|
125
|
+
if (!local || typeof local.read !== "function") {
|
|
126
|
+
throw new Error("resource not found");
|
|
127
|
+
}
|
|
128
|
+
return await local.read();
|
|
129
|
+
},
|
|
130
|
+
notifyResourceUpdated: async (uri) => {
|
|
131
|
+
if (typeof globalAny.__WEBMCP_BRIDGE_NOTIFY_RESOURCE_UPDATED__ === "function") {
|
|
132
|
+
await globalAny.__WEBMCP_BRIDGE_NOTIFY_RESOURCE_UPDATED__(String(uri || ""));
|
|
133
|
+
}
|
|
134
|
+
},
|
|
82
135
|
};
|
|
83
136
|
|
|
84
137
|
try {
|
|
@@ -97,6 +150,10 @@ const INJECT_SCRIPT = String.raw `
|
|
|
97
150
|
invoke: async (name, input) => {
|
|
98
151
|
return await modelContext.callTool(String(name || ""), input || {});
|
|
99
152
|
},
|
|
153
|
+
listResources: async () => await modelContext.listResources(),
|
|
154
|
+
readResource: async (uri) => {
|
|
155
|
+
return await modelContext.readResource(String(uri || ""));
|
|
156
|
+
},
|
|
100
157
|
};
|
|
101
158
|
|
|
102
159
|
globalAny.__WEBMCP_BRIDGE_MODE__ = "polyfill";
|
|
@@ -113,6 +170,7 @@ export async function createWebMcpPageGateway(page, options) {
|
|
|
113
170
|
const reinjectOnNavigate = options?.reinjectOnNavigate ?? true;
|
|
114
171
|
let fallbackStarted = false;
|
|
115
172
|
let fallbackStartPromise;
|
|
173
|
+
const resourceUpdatedListeners = new Set();
|
|
116
174
|
const ensureFallbackStarted = async () => {
|
|
117
175
|
if (!fallbackAdapter || fallbackStarted) {
|
|
118
176
|
return;
|
|
@@ -126,6 +184,7 @@ export async function createWebMcpPageGateway(page, options) {
|
|
|
126
184
|
await fallbackStartPromise;
|
|
127
185
|
};
|
|
128
186
|
const exposedName = `__WEBMCP_BRIDGE_CALL__${randomUUID().replaceAll("-", "")}`;
|
|
187
|
+
const resourceUpdatedName = `__WEBMCP_BRIDGE_NOTIFY_RESOURCE_UPDATED__${randomUUID().replaceAll("-", "")}`;
|
|
129
188
|
await page.exposeFunction(exposedName, async (name, input) => {
|
|
130
189
|
if (!fallbackAdapter) {
|
|
131
190
|
return {
|
|
@@ -138,11 +197,24 @@ export async function createWebMcpPageGateway(page, options) {
|
|
|
138
197
|
await ensureFallbackStarted();
|
|
139
198
|
return await fallbackAdapter.callTool({ name, input }, { page });
|
|
140
199
|
});
|
|
200
|
+
await page.exposeFunction(resourceUpdatedName, async (uri) => {
|
|
201
|
+
for (const listener of resourceUpdatedListeners) {
|
|
202
|
+
try {
|
|
203
|
+
listener(uri);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
options?.onError?.(error);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
141
210
|
const bindScript = `window.__WEBMCP_BRIDGE_CALL__ = window.${exposedName};`;
|
|
211
|
+
const bindResourceUpdatedScript = `window.__WEBMCP_BRIDGE_NOTIFY_RESOURCE_UPDATED__ = window.${resourceUpdatedName};`;
|
|
142
212
|
await page.addInitScript(INJECT_SCRIPT);
|
|
143
213
|
await page.addInitScript(bindScript);
|
|
214
|
+
await page.addInitScript(bindResourceUpdatedScript);
|
|
144
215
|
await page.evaluate(INJECT_SCRIPT);
|
|
145
216
|
await page.evaluate(bindScript);
|
|
217
|
+
await page.evaluate(bindResourceUpdatedScript);
|
|
146
218
|
const detectedMode = await page.evaluate(() => {
|
|
147
219
|
const globalAny = window;
|
|
148
220
|
return globalAny.__WEBMCP_BRIDGE_MODE__ ?? "polyfill";
|
|
@@ -156,7 +228,7 @@ export async function createWebMcpPageGateway(page, options) {
|
|
|
156
228
|
await ensureFallbackStarted();
|
|
157
229
|
}
|
|
158
230
|
const rebindOnNavigate = () => {
|
|
159
|
-
void page.evaluate(bindScript).catch(() => {
|
|
231
|
+
void Promise.all([page.evaluate(bindScript), page.evaluate(bindResourceUpdatedScript)]).catch(() => {
|
|
160
232
|
// Ignore transient navigation races; the init script will rebind on next document.
|
|
161
233
|
});
|
|
162
234
|
};
|
|
@@ -201,6 +273,43 @@ export async function createWebMcpPageGateway(page, options) {
|
|
|
201
273
|
}, payload);
|
|
202
274
|
return result;
|
|
203
275
|
},
|
|
276
|
+
listResources: async () => {
|
|
277
|
+
if (mode === "adapter-shim") {
|
|
278
|
+
return [];
|
|
279
|
+
}
|
|
280
|
+
return await page.evaluate(async () => {
|
|
281
|
+
const globalAny = window;
|
|
282
|
+
const listResources = globalAny.__webmcpBridge?.listResources;
|
|
283
|
+
if (typeof listResources !== "function") {
|
|
284
|
+
return [];
|
|
285
|
+
}
|
|
286
|
+
const resources = await listResources();
|
|
287
|
+
return Array.isArray(resources) ? resources : [];
|
|
288
|
+
});
|
|
289
|
+
},
|
|
290
|
+
readResource: async (uri) => {
|
|
291
|
+
if (mode === "adapter-shim") {
|
|
292
|
+
throw new Error("resource reads are not available in adapter-shim mode");
|
|
293
|
+
}
|
|
294
|
+
const payload = {
|
|
295
|
+
resourceUri: uri,
|
|
296
|
+
};
|
|
297
|
+
const result = await page.evaluate(async ({ resourceUri }) => {
|
|
298
|
+
const globalAny = window;
|
|
299
|
+
const readResource = globalAny.__webmcpBridge?.readResource;
|
|
300
|
+
if (typeof readResource !== "function") {
|
|
301
|
+
throw new Error("WebMCP bridge readResource handler missing");
|
|
302
|
+
}
|
|
303
|
+
return await readResource(String(resourceUri || ""));
|
|
304
|
+
}, payload);
|
|
305
|
+
return result;
|
|
306
|
+
},
|
|
307
|
+
onResourceUpdated: (listener) => {
|
|
308
|
+
resourceUpdatedListeners.add(listener);
|
|
309
|
+
return () => {
|
|
310
|
+
resourceUpdatedListeners.delete(listener);
|
|
311
|
+
};
|
|
312
|
+
},
|
|
204
313
|
close: async () => {
|
|
205
314
|
const session = SESSIONS.get(page);
|
|
206
315
|
if (!session) {
|
|
@@ -211,6 +320,7 @@ export async function createWebMcpPageGateway(page, options) {
|
|
|
211
320
|
},
|
|
212
321
|
};
|
|
213
322
|
const cleanup = async () => {
|
|
323
|
+
resourceUpdatedListeners.clear();
|
|
214
324
|
if (reinjectOnNavigate) {
|
|
215
325
|
const pageEvents = page;
|
|
216
326
|
if (typeof pageEvents.removeListener === "function") {
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,6 +12,12 @@ export type WebMcpToolDefinition = {
|
|
|
12
12
|
readOnlyHint?: boolean;
|
|
13
13
|
};
|
|
14
14
|
};
|
|
15
|
+
export type WebMcpResourceDefinition = {
|
|
16
|
+
uri: string;
|
|
17
|
+
name?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
mimeType?: string;
|
|
20
|
+
};
|
|
15
21
|
export type AdapterManifest = {
|
|
16
22
|
id: string;
|
|
17
23
|
displayName: string;
|
|
@@ -47,6 +53,7 @@ export type CreateWebMcpPageGatewayOptions = {
|
|
|
47
53
|
fallbackAdapter?: SiteAdapter;
|
|
48
54
|
preferNative?: boolean;
|
|
49
55
|
reinjectOnNavigate?: boolean;
|
|
56
|
+
onError?: (error: unknown) => void;
|
|
50
57
|
};
|
|
51
58
|
export type WebMcpPageGateway = {
|
|
52
59
|
id: string;
|
|
@@ -54,6 +61,9 @@ export type WebMcpPageGateway = {
|
|
|
54
61
|
page: Page;
|
|
55
62
|
listTools: () => Promise<WebMcpToolDefinition[]>;
|
|
56
63
|
callTool: (name: string, input: JsonValue) => Promise<JsonValue>;
|
|
64
|
+
listResources: () => Promise<WebMcpResourceDefinition[]>;
|
|
65
|
+
readResource: (uri: string) => Promise<JsonValue>;
|
|
66
|
+
onResourceUpdated: (listener: (uri: string) => void) => () => void;
|
|
57
67
|
close: () => Promise<void>;
|
|
58
68
|
};
|
|
59
69
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC7E,QAAQ,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACvG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,eAAe,CAAC;IAC1B,aAAa,EAAE,MAAM,WAAW,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webmcp-bridge/playwright",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"description": "Playwright page gateway that uses native WebMCP when available and falls back to injected adapters.",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
8
|
"exports": {
|
|
@@ -13,9 +14,26 @@
|
|
|
13
14
|
"files": [
|
|
14
15
|
"dist"
|
|
15
16
|
],
|
|
17
|
+
"homepage": "https://github.com/holon-run/webmcp-bridge/tree/main/packages/playwright",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/holon-run/webmcp-bridge.git",
|
|
21
|
+
"directory": "packages/playwright"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/holon-run/webmcp-bridge/issues"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"webmcp",
|
|
28
|
+
"mcp",
|
|
29
|
+
"playwright",
|
|
30
|
+
"browser",
|
|
31
|
+
"navigator.modelContext",
|
|
32
|
+
"automation"
|
|
33
|
+
],
|
|
16
34
|
"dependencies": {
|
|
17
35
|
"playwright": "^1.58.2",
|
|
18
|
-
"@webmcp-bridge/core": "0.
|
|
36
|
+
"@webmcp-bridge/core": "0.5.0"
|
|
19
37
|
},
|
|
20
38
|
"license": "MIT",
|
|
21
39
|
"scripts": {
|