unframer 4.1.8 → 4.2.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 +5 -5
- package/dist/babel-jsx.d.ts +9 -0
- package/dist/babel-jsx.d.ts.map +1 -1
- package/dist/babel-jsx.js +72 -0
- package/dist/babel-jsx.js.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +262 -42
- package/dist/cli.js.map +1 -1
- package/dist/css-core.d.ts +50 -0
- package/dist/css-core.d.ts.map +1 -0
- package/dist/css-core.js +231 -0
- package/dist/css-core.js.map +1 -0
- package/dist/css.d.ts +9 -43
- package/dist/css.d.ts.map +1 -1
- package/dist/css.js +9 -232
- package/dist/css.js.map +1 -1
- package/dist/exporter.d.ts +1 -1
- package/dist/exporter.d.ts.map +1 -1
- package/dist/exporter.js +72 -11
- package/dist/exporter.js.map +1 -1
- package/dist/exporter.test.js +78 -0
- package/dist/exporter.test.js.map +1 -1
- package/dist/framer-chunks/{SqliteDatabase-VAKIICSG-R7ZS6CHH.js → SqliteDatabase-VAKIICSG-OPV4MG3Y.js} +5 -4
- package/dist/framer-chunks/{chunk-2DZGP7C2.js → chunk-7ZLQTYXQ.js} +5 -24
- package/dist/framer-chunks/chunk-IKQSD2QC.js +10 -0
- package/dist/framer-chunks/default-blog-sqlite-7ZHEY3GT-TVGUYU6H.js +7 -0
- package/dist/framer-chunks/fontshare-4THNDPMZ-FLLTWCDO.js +7 -0
- package/dist/framer-chunks/fontshare-B2QLD7YB-5V3XZJAH.js +7 -0
- package/dist/framer-chunks/fontshare-O22OBJ3D-FIG3CRN3.js +7 -0
- package/dist/framer-chunks/framer-font-45AI7UCZ-CKGC4MJC.js +7 -0
- package/dist/framer-chunks/google-3FCAKCAC-AM34UPJK.js +7 -0
- package/dist/framer-chunks/google-3SZHWBC6-2VTQEQ7J.js +7 -0
- package/dist/framer-chunks/google-GXDJLGJB-JNEJGCGD.js +7 -0
- package/dist/framer-chunks/sqlite-wasm-FGP37EAY-NO5QVZDI.js +7 -0
- package/dist/framer-chunks/sqlite3-SISQ6ENZ-5WRKGWTY.js +7 -0
- package/dist/framer.d.ts +128 -0
- package/dist/framer.js +820 -428
- package/dist/plugin-mcp-dist/lib/framer.d.ts +1 -7
- package/dist/plugin-mcp-dist/lib/framer.d.ts.map +1 -1
- package/dist/plugin-mcp-dist/lib/framer.js +90 -23
- package/dist/plugin-mcp-dist/lib/framer.js.map +1 -1
- package/dist/plugin-mcp-dist/lib/framer.test.d.ts +2 -0
- package/dist/plugin-mcp-dist/lib/framer.test.d.ts.map +1 -0
- package/dist/plugin-mcp-dist/lib/framer.test.js +214 -0
- package/dist/plugin-mcp-dist/lib/framer.test.js.map +1 -0
- package/dist/plugin-mcp-dist/lib/mcp-handlers.d.ts.map +1 -1
- package/dist/plugin-mcp-dist/lib/mcp-handlers.js +69 -11
- package/dist/plugin-mcp-dist/lib/mcp-handlers.js.map +1 -1
- package/dist/plugin-mcp-dist/lib/mcp.test.js +340 -364
- package/dist/plugin-mcp-dist/lib/mcp.test.js.map +1 -1
- package/dist/plugin-mcp-dist/lib/plugin-websocket.d.ts.map +1 -1
- package/dist/plugin-mcp-dist/lib/plugin-websocket.js +0 -3
- package/dist/plugin-mcp-dist/lib/plugin-websocket.js.map +1 -1
- package/dist/plugin-mcp-dist/lib/react-export.d.ts.map +1 -1
- package/dist/plugin-mcp-dist/lib/react-export.js +79 -61
- package/dist/plugin-mcp-dist/lib/react-export.js.map +1 -1
- package/dist/plugin-mcp-dist/lib/schema.d.ts +8 -0
- package/dist/plugin-mcp-dist/lib/schema.d.ts.map +1 -1
- package/dist/plugin-mcp-dist/lib/schema.js +18 -1
- package/dist/plugin-mcp-dist/lib/schema.js.map +1 -1
- package/dist/plugin-mcp-dist/lib/store.d.ts +1 -1
- package/dist/plugin-mcp-dist/lib/store.d.ts.map +1 -1
- package/dist/plugin-mcp-dist/lib/tunnel-integration.test.d.ts +2 -0
- package/dist/plugin-mcp-dist/lib/tunnel-integration.test.d.ts.map +1 -0
- package/dist/plugin-mcp-dist/lib/tunnel-integration.test.js +147 -0
- package/dist/plugin-mcp-dist/lib/tunnel-integration.test.js.map +1 -0
- package/dist/plugin-mcp-dist/lib/tunnel.d.ts +46 -0
- package/dist/plugin-mcp-dist/lib/tunnel.d.ts.map +1 -0
- package/dist/plugin-mcp-dist/lib/tunnel.js +117 -0
- package/dist/plugin-mcp-dist/lib/tunnel.js.map +1 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.d.ts +13 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.d.ts.map +1 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.js +56 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.js.map +1 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.test.d.ts +2 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.test.d.ts.map +1 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.test.js +212 -0
- package/dist/plugin-mcp-dist/lib/upstream-socket.test.js.map +1 -0
- package/dist/plugin-mcp-dist/lib/utils.d.ts +1 -9
- package/dist/plugin-mcp-dist/lib/utils.d.ts.map +1 -1
- package/dist/plugin-mcp-dist/lib/utils.js +13 -9
- package/dist/plugin-mcp-dist/lib/utils.js.map +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -13
- package/dist/react.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -8
- package/src/babel-jsx.ts +99 -0
- package/src/cli.ts +295 -42
- package/src/css-core.ts +277 -0
- package/src/css.tsx +10 -276
- package/src/exporter.test.ts +82 -0
- package/src/exporter.ts +92 -11
- package/src/framer.d.ts +128 -0
- package/src/framer.js +820 -428
- package/src/plugin-mcp-dist/lib/framer.d.ts +2 -5
- package/src/plugin-mcp-dist/lib/framer.d.ts.map +1 -1
- package/src/plugin-mcp-dist/lib/framer.js +90 -23
- package/src/plugin-mcp-dist/lib/framer.js.map +1 -1
- package/src/plugin-mcp-dist/lib/framer.test.d.ts +2 -0
- package/src/plugin-mcp-dist/lib/framer.test.d.ts.map +1 -0
- package/src/plugin-mcp-dist/lib/framer.test.js +213 -0
- package/src/plugin-mcp-dist/lib/framer.test.js.map +1 -0
- package/src/plugin-mcp-dist/lib/mcp-handlers.d.ts +2 -2
- package/src/plugin-mcp-dist/lib/mcp-handlers.d.ts.map +1 -1
- package/src/plugin-mcp-dist/lib/mcp-handlers.js +69 -11
- package/src/plugin-mcp-dist/lib/mcp-handlers.js.map +1 -1
- package/src/plugin-mcp-dist/lib/mcp.test.js +340 -364
- package/src/plugin-mcp-dist/lib/mcp.test.js.map +1 -1
- package/src/plugin-mcp-dist/lib/plugin-websocket.d.ts.map +1 -1
- package/src/plugin-mcp-dist/lib/plugin-websocket.js +0 -3
- package/src/plugin-mcp-dist/lib/plugin-websocket.js.map +1 -1
- package/src/plugin-mcp-dist/lib/react-export.d.ts +1 -1
- package/src/plugin-mcp-dist/lib/react-export.d.ts.map +1 -1
- package/src/plugin-mcp-dist/lib/react-export.js +79 -61
- package/src/plugin-mcp-dist/lib/react-export.js.map +1 -1
- package/src/plugin-mcp-dist/lib/schema.d.ts +11 -3
- package/src/plugin-mcp-dist/lib/schema.d.ts.map +1 -1
- package/src/plugin-mcp-dist/lib/schema.js +18 -1
- package/src/plugin-mcp-dist/lib/schema.js.map +1 -1
- package/src/plugin-mcp-dist/lib/tunnel-integration.test.d.ts +2 -0
- package/src/plugin-mcp-dist/lib/tunnel-integration.test.d.ts.map +1 -0
- package/src/plugin-mcp-dist/lib/tunnel-integration.test.js +146 -0
- package/src/plugin-mcp-dist/lib/tunnel-integration.test.js.map +1 -0
- package/src/plugin-mcp-dist/lib/tunnel.d.ts +55 -0
- package/src/plugin-mcp-dist/lib/tunnel.d.ts.map +1 -0
- package/src/plugin-mcp-dist/lib/tunnel.js +116 -0
- package/src/plugin-mcp-dist/lib/tunnel.js.map +1 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.d.ts +28 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.d.ts.map +1 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.js +55 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.js.map +1 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.test.d.ts +5 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.test.d.ts.map +1 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.test.js +211 -0
- package/src/plugin-mcp-dist/lib/upstream-socket.test.js.map +1 -0
- package/src/plugin-mcp-dist/lib/utils.d.ts +2 -2
- package/src/plugin-mcp-dist/lib/utils.d.ts.map +1 -1
- package/src/plugin-mcp-dist/lib/utils.js +13 -9
- package/src/plugin-mcp-dist/lib/utils.js.map +1 -1
- package/src/react.tsx +7 -19
- package/src/styles/framer.css +34 -64
- package/src/version.ts +1 -1
- package/dist/framer-chunks/default-blog-sqlite-7ZHEY3GT-27R5KAAW.js +0 -9
- package/dist/framer-chunks/fontshare-4THNDPMZ-BJQGNHXN.js +0 -27099
- package/dist/framer-chunks/fontshare-B2QLD7YB-4BZEAA37.js +0 -119
- package/dist/framer-chunks/fontshare-O22OBJ3D-ALBQLFE5.js +0 -825
- package/dist/framer-chunks/framer-font-45AI7UCZ-LU7DEIDM.js +0 -7
- package/dist/framer-chunks/google-3FCAKCAC-P5EL6KGL.js +0 -623876
- package/dist/framer-chunks/google-3SZHWBC6-OBXS3UIH.js +0 -1627
- package/dist/framer-chunks/google-GXDJLGJB-HHIXFE4M.js +0 -6885
- package/dist/framer-chunks/sqlite-wasm-FGP37EAY-HR6PIAJQ.js +0 -11479
- package/dist/framer-chunks/sqlite3-SISQ6ENZ-KMXYXSSV.js +0 -9
- package/dist/generated/api-client.d.ts +0 -21
- package/dist/generated/api-client.d.ts.map +0 -1
- package/dist/generated/api-client.js +0 -27
- package/dist/generated/api-client.js.map +0 -1
- package/src/generated/api-client.d.ts +0 -1238
- package/src/generated/api-client.js +0 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,yBAAyB,oEAC+B,CAAA;AAKrE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,CAAC,CAAC,UAAU,CAAA;IACnB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAmBD,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkF7B,CAAA;AAcF,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,yBAAyB,oEAC+B,CAAA;AAKrE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,CAAC,CAAC,UAAU,CAAA;IACnB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAmBD,QAAA,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkF7B,CAAA;AAcF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0zBwB,CAAA;AAG7C,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,QAAQ,CAAA;AAChD,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E,KAAK,UAAU,CAAC,CAAC,SAAS,YAAY,IAAI;IACtC,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7C,MAAM,CAAC,EAAE,GAAG,CAAA;CACf,CAAA;AAGD,MAAM,MAAM,uBAAuB,GAAG;KACjC,CAAC,IAAI,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC;CACrC,CAAC,YAAY,CAAC,CAAA;AAEf,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAC,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG;KACtB,CAAC,IAAI,YAAY,GAAG;QACjB,IAAI,EAAE,CAAC,CAAA;QACP,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;KAC3D;CACJ,CAAC,YAAY,CAAC,CAAA"}
|
|
@@ -575,7 +575,7 @@ export const mcpTools = {
|
|
|
575
575
|
description: dedent `
|
|
576
576
|
Export selected Framer components as React code. This tool will return a cli command you can run to download your Framer components as React code.
|
|
577
577
|
|
|
578
|
-
This tool uses the same logic implemented in the Framer React Export plugin: https://
|
|
578
|
+
This tool uses the same logic implemented in the Framer React Export plugin: https://framer.link/TGWRs2U
|
|
579
579
|
|
|
580
580
|
You should login with the same Google account you used in Framer React Export plugin if you want to reuse your existing subscription.
|
|
581
581
|
|
|
@@ -864,6 +864,23 @@ export const mcpTools = {
|
|
|
864
864
|
}),
|
|
865
865
|
output: z.any(),
|
|
866
866
|
},
|
|
867
|
+
createComponent: {
|
|
868
|
+
description: dedent `
|
|
869
|
+
Create a new reusable component in the Framer project.
|
|
870
|
+
|
|
871
|
+
Components are reusable design elements that can be instantiated across pages. After creation, use updateXmlForNode to add content inside the component, and getComponentInsertUrlAndTypes to get its insertUrl for placing instances.
|
|
872
|
+
|
|
873
|
+
Optionally move existing layers into the component by providing their node IDs.
|
|
874
|
+
`,
|
|
875
|
+
input: z.object({
|
|
876
|
+
name: z.string().describe('Name for the new component'),
|
|
877
|
+
nodeIds: z
|
|
878
|
+
.array(NodeId)
|
|
879
|
+
.optional()
|
|
880
|
+
.describe('Existing layer IDs to move into the component. Layers are moved in order.'),
|
|
881
|
+
}),
|
|
882
|
+
output: z.any(),
|
|
883
|
+
},
|
|
867
884
|
createPage: {
|
|
868
885
|
description: dedent `
|
|
869
886
|
Create a new page in the Framer project.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-integration.test.d.ts","sourceRoot":"","sources":["../../src/lib/tunnel-integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integration tests for the MCP v2 worker deployed to preview.
|
|
3
|
+
*
|
|
4
|
+
* Run after deploying to preview: pnpm test -t "tunnel integration"
|
|
5
|
+
*
|
|
6
|
+
* The e2e test runs for both transport modes (streamable-http on /mcp and legacy SSE on /sse)
|
|
7
|
+
* in a single test run via a root-level for loop.
|
|
8
|
+
*
|
|
9
|
+
* - Tunnel tests: upstream replacement (4009), HTTP routing
|
|
10
|
+
* - E2e tests: full MCP SDK client pipeline for each transport mode
|
|
11
|
+
*/
|
|
12
|
+
import { describe, test, expect } from 'vitest';
|
|
13
|
+
import WebSocket from 'ws';
|
|
14
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
15
|
+
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
16
|
+
import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
|
|
17
|
+
const WS_URL = 'wss://mcp.preview.unframer.co/_tunnel';
|
|
18
|
+
const HTTP_URL = 'https://mcp.preview.unframer.co';
|
|
19
|
+
// Real session credentials for preview (validated by getValidatedSession → website API → KV cache)
|
|
20
|
+
const MCP_ID = '598f176d590e612e9b6bcaebb54abb0a8763c6f54ba5b9c136690ff9ad2400cc';
|
|
21
|
+
const MCP_SECRET = 'FpGeQQcnvd9CpFvZwEdONuAjEX7c6AwJ';
|
|
22
|
+
const getTunnelId = () => `test-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
23
|
+
function connectWs(url) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
const ws = new WebSocket(url);
|
|
26
|
+
ws.on('open', () => {
|
|
27
|
+
resolve(ws);
|
|
28
|
+
});
|
|
29
|
+
ws.on('error', reject);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
describe('tunnel integration', () => {
|
|
33
|
+
test('connecting upstream twice replaces the first with 4009', async () => {
|
|
34
|
+
const tunnelId = getTunnelId();
|
|
35
|
+
const upstream1 = await connectWs(`${WS_URL}/upstream?id=${tunnelId}`);
|
|
36
|
+
const upstream1ClosePromise = new Promise((resolve) => {
|
|
37
|
+
upstream1.on('close', (code, reason) => {
|
|
38
|
+
resolve({ code, reason: reason.toString() });
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
const upstream2 = await connectWs(`${WS_URL}/upstream?id=${tunnelId}`);
|
|
42
|
+
const closeEvent = await upstream1ClosePromise;
|
|
43
|
+
expect(closeEvent.code).toBe(4009);
|
|
44
|
+
expect(closeEvent.reason).toBe('Upstream already connected');
|
|
45
|
+
expect(upstream2.readyState).toBe(WebSocket.OPEN);
|
|
46
|
+
upstream2.close();
|
|
47
|
+
}, 15000);
|
|
48
|
+
test('HTTP endpoints return expected responses', async () => {
|
|
49
|
+
// 404 for unknown paths
|
|
50
|
+
const res404 = await fetch(`${HTTP_URL}/unknown`);
|
|
51
|
+
expect(res404.status).toBe(404);
|
|
52
|
+
// 401 for /mcp without auth
|
|
53
|
+
const resMcp = await fetch(`${HTTP_URL}/mcp`, { method: 'POST' });
|
|
54
|
+
expect(resMcp.status).toBe(401);
|
|
55
|
+
// 401 for /sse without auth
|
|
56
|
+
const resSse = await fetch(`${HTTP_URL}/sse`);
|
|
57
|
+
expect(resSse.status).toBe(401);
|
|
58
|
+
// 428 for htmlForUserWithoutFramerUserId
|
|
59
|
+
const resHtml = await fetch(`${HTTP_URL}/htmlForUserWithoutFramerUserId`);
|
|
60
|
+
expect(resHtml.status).toBe(428);
|
|
61
|
+
const htmlContent = await resHtml.text();
|
|
62
|
+
expect(htmlContent).toContain('Framer MCP Plugin Not Open');
|
|
63
|
+
}, 15000);
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* E2e tests run for each transport mode. Both exercise the same pipeline:
|
|
67
|
+
* MCP client → Worker → McpTunnel DO → upstream plugin WS → response
|
|
68
|
+
*
|
|
69
|
+
* The only difference is the client transport:
|
|
70
|
+
* - streamable-http: POST /mcp (StreamableHTTPClientTransport)
|
|
71
|
+
* - sse: GET /sse + POST /sse/message (SSEClientTransport, legacy protocol)
|
|
72
|
+
*/
|
|
73
|
+
const transportModes = ['streamable-http', 'sse'];
|
|
74
|
+
for (const mode of transportModes) {
|
|
75
|
+
describe(`e2e [${mode}]`, () => {
|
|
76
|
+
test('MCP SDK client → worker → DO → upstream plugin WS → response', async () => {
|
|
77
|
+
// 1. Connect a fake plugin as upstream WebSocket (mimics plugin-websocket.ts)
|
|
78
|
+
const upstream = await connectWs(`wss://preview.unframer.co/_tunnel/upstream?id=${MCP_ID}`);
|
|
79
|
+
// Send initial ready message (like plugin-websocket.ts does on open)
|
|
80
|
+
upstream.send(JSON.stringify({ type: 'ready' }));
|
|
81
|
+
// Set up the fake plugin handler
|
|
82
|
+
const receivedToolCalls = [];
|
|
83
|
+
upstream.on('message', (data) => {
|
|
84
|
+
const raw = data.toString();
|
|
85
|
+
let msg;
|
|
86
|
+
try {
|
|
87
|
+
msg = JSON.parse(raw);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (!msg.payload?.type) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (msg.payload.type === 'ready' || msg.payload.type === 'close') {
|
|
96
|
+
if (msg.payload.type === 'ready') {
|
|
97
|
+
upstream.send(JSON.stringify({ type: 'ready' }));
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
receivedToolCalls.push(msg.payload.type);
|
|
102
|
+
const response = {
|
|
103
|
+
id: msg.id,
|
|
104
|
+
payload: {
|
|
105
|
+
...msg.payload,
|
|
106
|
+
output: `mock output for ${msg.payload.type}`,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
upstream.send(JSON.stringify(response));
|
|
110
|
+
});
|
|
111
|
+
// Small delay to ensure upstream WebSocket is fully accepted by the DO
|
|
112
|
+
await new Promise((r) => { setTimeout(r, 1000); });
|
|
113
|
+
// 2. Create MCP SDK client with the appropriate transport
|
|
114
|
+
const transport = (() => {
|
|
115
|
+
if (mode === 'sse') {
|
|
116
|
+
const sseUrl = new URL(`${HTTP_URL}/sse?id=${MCP_ID}&secret=${MCP_SECRET}`);
|
|
117
|
+
return new SSEClientTransport(sseUrl);
|
|
118
|
+
}
|
|
119
|
+
const mcpUrl = new URL(`${HTTP_URL}/mcp?id=${MCP_ID}&secret=${MCP_SECRET}`);
|
|
120
|
+
return new StreamableHTTPClientTransport(mcpUrl);
|
|
121
|
+
})();
|
|
122
|
+
const client = new Client({ name: 'integration-test', version: '1.0.0' });
|
|
123
|
+
await client.connect(transport);
|
|
124
|
+
// 3. List tools — handled entirely inside the DO (no upstream roundtrip needed)
|
|
125
|
+
const { tools } = await client.listTools();
|
|
126
|
+
expect(tools.length).toBeGreaterThan(0);
|
|
127
|
+
const toolNames = tools.map((t) => { return t.name; });
|
|
128
|
+
expect(toolNames).toContain('getProjectXml');
|
|
129
|
+
expect(toolNames).toContain('getNodeXml');
|
|
130
|
+
// 4. Call a tool — full pipeline through the DO to upstream plugin WS
|
|
131
|
+
const result = await client.callTool({ name: 'getProjectXml', arguments: {} });
|
|
132
|
+
const textContent = result.content;
|
|
133
|
+
expect(textContent[0].text).toContain('mock output for getProjectXml');
|
|
134
|
+
expect(receivedToolCalls).toContain('getProjectXml');
|
|
135
|
+
// 5. Call another tool to verify the pipeline works repeatedly
|
|
136
|
+
const result2 = await client.callTool({ name: 'getNodeXml', arguments: { nodeId: 'test-node-123' } });
|
|
137
|
+
const textContent2 = result2.content;
|
|
138
|
+
expect(textContent2[0].text).toContain('mock output for getNodeXml');
|
|
139
|
+
expect(receivedToolCalls).toContain('getNodeXml');
|
|
140
|
+
// Cleanup
|
|
141
|
+
await client.close();
|
|
142
|
+
upstream.close();
|
|
143
|
+
}, 30000);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=tunnel-integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel-integration.test.js","sourceRoot":"","sources":["../../src/lib/tunnel-integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendored upstream-only tunnel DO for Cloudflare Workers with WebSocket hibernation.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from cloudflare-tunnel library — keeps only what McpTunnel uses:
|
|
5
|
+
* - Upstream WebSocket acceptance with hibernation tags
|
|
6
|
+
* - Upstream replacement (close old with 4009)
|
|
7
|
+
* - Ping auto-response (avoids waking DO)
|
|
8
|
+
* - handleTunnelFetch router
|
|
9
|
+
* - addCors helper
|
|
10
|
+
*
|
|
11
|
+
* Dropped: downstream relay, multiplexer, wildcard subscribers, standalone worker export.
|
|
12
|
+
*/
|
|
13
|
+
export type Attachment = {
|
|
14
|
+
role: 'up' | 'sse';
|
|
15
|
+
ids: string[];
|
|
16
|
+
connectionId?: string;
|
|
17
|
+
connectionOrdinal?: number;
|
|
18
|
+
connectedAt?: number;
|
|
19
|
+
readyAcked?: boolean;
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Route /_tunnel/* requests to a Tunnel Durable Object.
|
|
24
|
+
* Use in the worker's fetch handler to add tunnel support.
|
|
25
|
+
*/
|
|
26
|
+
export declare function handleTunnelFetch({ req, doNamespace, }: {
|
|
27
|
+
req: Request;
|
|
28
|
+
doNamespace: DurableObjectNamespace;
|
|
29
|
+
}): Promise<Response> | null;
|
|
30
|
+
/**
|
|
31
|
+
* Upstream-only Tunnel Durable Object.
|
|
32
|
+
*
|
|
33
|
+
* Accepts upstream WebSocket connections with hibernation. Each upstream is
|
|
34
|
+
* tagged as `up:${id}` so it can be looked up by id. Only one upstream per id
|
|
35
|
+
* is allowed — connecting a second closes the first with code 4009.
|
|
36
|
+
*
|
|
37
|
+
* Ping messages are auto-responded without waking the DO:
|
|
38
|
+
* - 'ping' → 'pong'
|
|
39
|
+
* - '{"type":"ping"}' → '{"type":"pong"}'
|
|
40
|
+
*/
|
|
41
|
+
export declare class Tunnel<E = unknown> {
|
|
42
|
+
ctx: DurableObjectState;
|
|
43
|
+
env: E;
|
|
44
|
+
constructor(state: DurableObjectState, env: E);
|
|
45
|
+
fetch(req: Request): Promise<Response>;
|
|
46
|
+
webSocketMessage(_ws: WebSocket, _message: string | ArrayBuffer): Promise<void>;
|
|
47
|
+
webSocketClose(_ws: WebSocket, _code: number, _reason: string, _wasClean: boolean): Promise<void>;
|
|
48
|
+
webSocketError(_ws: WebSocket, _error: unknown): Promise<void>;
|
|
49
|
+
protected closeUpstreamsForId(id: string, { code, reason }: {
|
|
50
|
+
code: number;
|
|
51
|
+
reason: string;
|
|
52
|
+
}): void;
|
|
53
|
+
}
|
|
54
|
+
export declare const addCors: (r: Response) => Response;
|
|
55
|
+
//# sourceMappingURL=tunnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/lib/tunnel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,UAAU,GAAG;IACrB,IAAI,EAAE,IAAI,GAAG,KAAK,CAAA;IAClB,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,GAAG,EACH,WAAW,GACd,EAAE;IACC,GAAG,EAAE,OAAO,CAAA;IACZ,WAAW,EAAE,sBAAsB,CAAA;CACtC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAe3B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,MAAM,CAAC,CAAC,GAAG,OAAO;IAC3B,GAAG,EAAE,kBAAkB,CAAA;IACvB,GAAG,EAAE,CAAC,CAAA;gBAEM,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC;IAWvC,KAAK,CAAC,GAAG,EAAE,OAAO;IAwClB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW;IAI/D,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;IAIjF,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO;IAIpD,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAQ/F;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,QAAQ,aAWlC,CAAA"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendored upstream-only tunnel DO for Cloudflare Workers with WebSocket hibernation.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from cloudflare-tunnel library — keeps only what McpTunnel uses:
|
|
5
|
+
* - Upstream WebSocket acceptance with hibernation tags
|
|
6
|
+
* - Upstream replacement (close old with 4009)
|
|
7
|
+
* - Ping auto-response (avoids waking DO)
|
|
8
|
+
* - handleTunnelFetch router
|
|
9
|
+
* - addCors helper
|
|
10
|
+
*
|
|
11
|
+
* Dropped: downstream relay, multiplexer, wildcard subscribers, standalone worker export.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Route /_tunnel/* requests to a Tunnel Durable Object.
|
|
15
|
+
* Use in the worker's fetch handler to add tunnel support.
|
|
16
|
+
*/
|
|
17
|
+
export function handleTunnelFetch({ req, doNamespace, }) {
|
|
18
|
+
const url = new URL(req.url);
|
|
19
|
+
if (!url.pathname.startsWith('/_tunnel/')) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
url.pathname = url.pathname.replace('/_tunnel', '');
|
|
23
|
+
const ids = url.searchParams.getAll('id');
|
|
24
|
+
const doName = ids[0] ?? 'default';
|
|
25
|
+
const doId = doNamespace.idFromName(doName);
|
|
26
|
+
return doNamespace
|
|
27
|
+
.get(doId)
|
|
28
|
+
.fetch(new Request(url.toString(), req))
|
|
29
|
+
.then(addCors);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Upstream-only Tunnel Durable Object.
|
|
33
|
+
*
|
|
34
|
+
* Accepts upstream WebSocket connections with hibernation. Each upstream is
|
|
35
|
+
* tagged as `up:${id}` so it can be looked up by id. Only one upstream per id
|
|
36
|
+
* is allowed — connecting a second closes the first with code 4009.
|
|
37
|
+
*
|
|
38
|
+
* Ping messages are auto-responded without waking the DO:
|
|
39
|
+
* - 'ping' → 'pong'
|
|
40
|
+
* - '{"type":"ping"}' → '{"type":"pong"}'
|
|
41
|
+
*/
|
|
42
|
+
export class Tunnel {
|
|
43
|
+
ctx;
|
|
44
|
+
env;
|
|
45
|
+
constructor(state, env) {
|
|
46
|
+
this.ctx = state;
|
|
47
|
+
this.env = env;
|
|
48
|
+
// Only one auto-response pair can be active (second call replaces first).
|
|
49
|
+
// Plugin sends {"type":"ping"} every 5s — must match exactly.
|
|
50
|
+
this.ctx.setWebSocketAutoResponse(new WebSocketRequestResponsePair('{"type":"ping"}', '{"type":"pong"}'));
|
|
51
|
+
}
|
|
52
|
+
async fetch(req) {
|
|
53
|
+
if (req.headers.get('Upgrade') !== 'websocket') {
|
|
54
|
+
return addCors(new Response('Upgrade required', { status: 400 }));
|
|
55
|
+
}
|
|
56
|
+
const url = new URL(req.url);
|
|
57
|
+
const ids = url.searchParams.getAll('id');
|
|
58
|
+
const id = ids[0];
|
|
59
|
+
if (!url.pathname.startsWith('/upstream') || !id) {
|
|
60
|
+
return addCors(new Response('Only upstream connections with id are supported', { status: 400 }));
|
|
61
|
+
}
|
|
62
|
+
this.closeUpstreamsForId(id, { code: 4009, reason: 'Upstream already connected' });
|
|
63
|
+
const connectionOrdinal = this.ctx
|
|
64
|
+
.getWebSockets(`up:${id}`)
|
|
65
|
+
.map((socket) => {
|
|
66
|
+
const attachment = socket.deserializeAttachment();
|
|
67
|
+
return attachment?.connectionOrdinal || 0;
|
|
68
|
+
})
|
|
69
|
+
.reduce((maxOrdinal, ordinal) => {
|
|
70
|
+
return Math.max(maxOrdinal, ordinal);
|
|
71
|
+
}, 0) + 1;
|
|
72
|
+
const pair = new WebSocketPair();
|
|
73
|
+
const [client, server] = Object.values(pair);
|
|
74
|
+
this.ctx.acceptWebSocket(server, [`up:${id}`]);
|
|
75
|
+
server.serializeAttachment({
|
|
76
|
+
role: 'up',
|
|
77
|
+
ids: [id],
|
|
78
|
+
connectionId: crypto.randomUUID(),
|
|
79
|
+
connectionOrdinal,
|
|
80
|
+
connectedAt: Date.now(),
|
|
81
|
+
readyAcked: false,
|
|
82
|
+
});
|
|
83
|
+
return addCors(new Response(null, { status: 101, webSocket: client }));
|
|
84
|
+
}
|
|
85
|
+
async webSocketMessage(_ws, _message) {
|
|
86
|
+
// No relay — McpTunnel overrides this entirely
|
|
87
|
+
}
|
|
88
|
+
async webSocketClose(_ws, _code, _reason, _wasClean) {
|
|
89
|
+
// No downstream notification — McpTunnel overrides this
|
|
90
|
+
}
|
|
91
|
+
async webSocketError(_ws, _error) {
|
|
92
|
+
// No downstream notification — McpTunnel overrides this
|
|
93
|
+
}
|
|
94
|
+
closeUpstreamsForId(id, { code, reason }) {
|
|
95
|
+
const ups = this.ctx.getWebSockets(`up:${id}`);
|
|
96
|
+
for (const up of ups) {
|
|
97
|
+
try {
|
|
98
|
+
up.close(code, reason);
|
|
99
|
+
}
|
|
100
|
+
catch { }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export const addCors = (r) => {
|
|
105
|
+
const newHeaders = new Headers(r.headers);
|
|
106
|
+
newHeaders.set('Access-Control-Allow-Origin', '*');
|
|
107
|
+
newHeaders.set('Access-Control-Allow-Headers', '*');
|
|
108
|
+
newHeaders.set('Access-Control-Allow-Methods', 'GET,POST,OPTIONS');
|
|
109
|
+
return new Response(r.body, {
|
|
110
|
+
status: r.status,
|
|
111
|
+
statusText: r.statusText,
|
|
112
|
+
headers: newHeaders,
|
|
113
|
+
webSocket: r.webSocket,
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=tunnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/lib/tunnel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for picking the active upstream plugin socket and matching
|
|
3
|
+
* in-flight requests to the socket that sent them.
|
|
4
|
+
*/
|
|
5
|
+
import type { Attachment } from './tunnel.js';
|
|
6
|
+
type AttachmentSocket = {
|
|
7
|
+
deserializeAttachment(): Attachment | undefined;
|
|
8
|
+
readyState?: number;
|
|
9
|
+
};
|
|
10
|
+
type PendingSocketRequest = {
|
|
11
|
+
upstreamConnectionId?: string;
|
|
12
|
+
upstreamConnectionOrdinal?: number;
|
|
13
|
+
upstreamConnectedAt?: number;
|
|
14
|
+
};
|
|
15
|
+
export declare function getAttachmentConnectionId(attachment?: Attachment): string;
|
|
16
|
+
export declare function getAttachmentConnectionOrdinal(attachment?: Attachment): number;
|
|
17
|
+
export declare function getAttachmentConnectedAt(attachment?: Attachment): number;
|
|
18
|
+
export declare function isAttachmentReadyForRequests(attachment?: Attachment): boolean;
|
|
19
|
+
export declare function isSocketUsable(socket: AttachmentSocket): boolean;
|
|
20
|
+
export declare function pickActiveUpstreamSocket<T extends AttachmentSocket>({ sockets, }: {
|
|
21
|
+
sockets: T[];
|
|
22
|
+
}): T | undefined;
|
|
23
|
+
export declare function matchesPendingRequestSocket({ attachment, pendingRequest, }: {
|
|
24
|
+
attachment?: Attachment;
|
|
25
|
+
pendingRequest: PendingSocketRequest;
|
|
26
|
+
}): boolean;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=upstream-socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-socket.d.ts","sourceRoot":"","sources":["../../src/lib/upstream-socket.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,KAAK,gBAAgB,GAAG;IACpB,qBAAqB,IAAI,UAAU,GAAG,SAAS,CAAA;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,KAAK,oBAAoB,GAAG;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC/B,CAAA;AAID,wBAAgB,yBAAyB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAEzE;AAED,wBAAgB,8BAA8B,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAE9E;AAED,wBAAgB,wBAAwB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAExE;AAED,wBAAgB,4BAA4B,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAE7E;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAMhE;AAED,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,gBAAgB,EAAE,EACjE,OAAO,GACV,EAAE;IACC,OAAO,EAAE,CAAC,EAAE,CAAA;CACf,GAAG,CAAC,GAAG,SAAS,CAuBhB;AAED,wBAAgB,2BAA2B,CAAC,EACxC,UAAU,EACV,cAAc,GACjB,EAAE;IACC,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,cAAc,EAAE,oBAAoB,CAAA;CACvC,GAAG,OAAO,CAeV"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for picking the active upstream plugin socket and matching
|
|
3
|
+
* in-flight requests to the socket that sent them.
|
|
4
|
+
*/
|
|
5
|
+
const WS_OPEN = 1;
|
|
6
|
+
export function getAttachmentConnectionId(attachment) {
|
|
7
|
+
return attachment?.connectionId || '';
|
|
8
|
+
}
|
|
9
|
+
export function getAttachmentConnectionOrdinal(attachment) {
|
|
10
|
+
return attachment?.connectionOrdinal || 0;
|
|
11
|
+
}
|
|
12
|
+
export function getAttachmentConnectedAt(attachment) {
|
|
13
|
+
return attachment?.connectedAt || 0;
|
|
14
|
+
}
|
|
15
|
+
export function isAttachmentReadyForRequests(attachment) {
|
|
16
|
+
return attachment?.readyAcked !== false;
|
|
17
|
+
}
|
|
18
|
+
export function isSocketUsable(socket) {
|
|
19
|
+
if (typeof socket.readyState === 'undefined') {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return socket.readyState === WS_OPEN;
|
|
23
|
+
}
|
|
24
|
+
export function pickActiveUpstreamSocket({ sockets, }) {
|
|
25
|
+
return sockets
|
|
26
|
+
.filter((socket) => {
|
|
27
|
+
return isSocketUsable(socket);
|
|
28
|
+
})
|
|
29
|
+
.filter((socket) => {
|
|
30
|
+
return isAttachmentReadyForRequests(socket.deserializeAttachment());
|
|
31
|
+
})
|
|
32
|
+
.sort((left, right) => {
|
|
33
|
+
const rightOrdinal = getAttachmentConnectionOrdinal(right.deserializeAttachment());
|
|
34
|
+
const leftOrdinal = getAttachmentConnectionOrdinal(left.deserializeAttachment());
|
|
35
|
+
if (rightOrdinal !== leftOrdinal) {
|
|
36
|
+
return rightOrdinal - leftOrdinal;
|
|
37
|
+
}
|
|
38
|
+
return (getAttachmentConnectedAt(right.deserializeAttachment()) -
|
|
39
|
+
getAttachmentConnectedAt(left.deserializeAttachment()));
|
|
40
|
+
})[0];
|
|
41
|
+
}
|
|
42
|
+
export function matchesPendingRequestSocket({ attachment, pendingRequest, }) {
|
|
43
|
+
const attachmentConnectionId = getAttachmentConnectionId(attachment);
|
|
44
|
+
if (attachmentConnectionId && pendingRequest.upstreamConnectionId) {
|
|
45
|
+
return attachmentConnectionId === pendingRequest.upstreamConnectionId;
|
|
46
|
+
}
|
|
47
|
+
const attachmentConnectionOrdinal = getAttachmentConnectionOrdinal(attachment);
|
|
48
|
+
if (attachmentConnectionOrdinal && pendingRequest.upstreamConnectionOrdinal) {
|
|
49
|
+
return attachmentConnectionOrdinal === pendingRequest.upstreamConnectionOrdinal;
|
|
50
|
+
}
|
|
51
|
+
const attachmentConnectedAt = getAttachmentConnectedAt(attachment);
|
|
52
|
+
const pendingConnectedAt = pendingRequest.upstreamConnectedAt || 0;
|
|
53
|
+
return attachmentConnectedAt === pendingConnectedAt;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=upstream-socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-socket.js","sourceRoot":"","sources":["../../src/lib/upstream-socket.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,OAAO,GAAG,CAAC,CAAA;AAEjB,MAAM,UAAU,yBAAyB,CAAC,UAAuB;IAC7D,OAAO,UAAU,EAAE,YAAY,IAAI,EAAE,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,UAAuB;IAClE,OAAO,UAAU,EAAE,iBAAiB,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAAuB;IAC5D,OAAO,UAAU,EAAE,WAAW,IAAI,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,UAAuB;IAChE,OAAO,UAAU,EAAE,UAAU,KAAK,KAAK,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAwB;IACnD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,MAAM,CAAC,UAAU,KAAK,OAAO,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAA6B,EACjE,OAAO,GAGV;IACG,OAAO,OAAO;SACT,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,OAAO,4BAA4B,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,CAAA;IACvE,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAClB,MAAM,YAAY,GAAG,8BAA8B,CAC/C,KAAK,CAAC,qBAAqB,EAAE,CAChC,CAAA;QACD,MAAM,WAAW,GAAG,8BAA8B,CAC9C,IAAI,CAAC,qBAAqB,EAAE,CAC/B,CAAA;QACD,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO,YAAY,GAAG,WAAW,CAAA;QACrC,CAAC;QACD,OAAO,CACH,wBAAwB,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;YACvD,wBAAwB,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CACzD,CAAA;IACL,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACb,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,EACxC,UAAU,EACV,cAAc,GAIjB;IACG,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAA;IACpE,IAAI,sBAAsB,IAAI,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAChE,OAAO,sBAAsB,KAAK,cAAc,CAAC,oBAAoB,CAAA;IACzE,CAAC;IAED,MAAM,2BAA2B,GAAG,8BAA8B,CAAC,UAAU,CAAC,CAAA;IAC9E,IAAI,2BAA2B,IAAI,cAAc,CAAC,yBAAyB,EAAE,CAAC;QAC1E,OAAO,2BAA2B,KAAK,cAAc,CAAC,yBAAyB,CAAA;IACnF,CAAC;IAED,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAA;IAClE,MAAM,kBAAkB,GAAG,cAAc,CAAC,mBAAmB,IAAI,CAAC,CAAA;IAElE,OAAO,qBAAqB,KAAK,kBAAkB,CAAA;AACvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-socket.test.d.ts","sourceRoot":"","sources":["../../src/lib/upstream-socket.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|