@ytspar/sweetlink 1.22.0 → 1.23.0-canary.1ebca9b
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 +77 -0
- package/dist/browser/SweetlinkBridge.d.ts +9 -0
- package/dist/browser/SweetlinkBridge.d.ts.map +1 -1
- package/dist/browser/SweetlinkBridge.js +73 -20
- package/dist/browser/SweetlinkBridge.js.map +1 -1
- package/dist/browser/commands/screenshot.d.ts.map +1 -1
- package/dist/browser/commands/screenshot.js +16 -7
- package/dist/browser/commands/screenshot.js.map +1 -1
- package/dist/browser/screenshotUtils.d.ts +13 -3
- package/dist/browser/screenshotUtils.d.ts.map +1 -1
- package/dist/browser/screenshotUtils.js +32 -6
- package/dist/browser/screenshotUtils.js.map +1 -1
- package/dist/cdp.d.ts +1 -0
- package/dist/cdp.d.ts.map +1 -1
- package/dist/cdp.js +34 -3
- package/dist/cdp.js.map +1 -1
- package/dist/cli/outputSchemas.d.ts +1 -0
- package/dist/cli/outputSchemas.d.ts.map +1 -1
- package/dist/cli/outputSchemas.js +1 -0
- package/dist/cli/outputSchemas.js.map +1 -1
- package/dist/cli/sweetlink-dev.d.ts +5 -2
- package/dist/cli/sweetlink-dev.d.ts.map +1 -1
- package/dist/cli/sweetlink-dev.js +12 -4
- package/dist/cli/sweetlink-dev.js.map +1 -1
- package/dist/cli/sweetlink.js +12 -0
- package/dist/cli/sweetlink.js.map +1 -1
- package/dist/daemon/browser.d.ts +3 -0
- package/dist/daemon/browser.d.ts.map +1 -1
- package/dist/daemon/browser.js +38 -5
- package/dist/daemon/browser.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +2 -0
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/types.d.ts +2 -0
- package/dist/daemon/types.d.ts.map +1 -1
- package/dist/daemon/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/next.d.ts.map +1 -1
- package/dist/next.js +16 -1
- package/dist/next.js.map +1 -1
- package/dist/playwright.d.ts +19 -0
- package/dist/playwright.d.ts.map +1 -1
- package/dist/playwright.js +119 -12
- package/dist/playwright.js.map +1 -1
- package/dist/server/index.d.ts +6 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +56 -16
- package/dist/server/index.js.map +1 -1
- package/dist/types.d.ts +35 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +127 -0
- package/dist/types.js.map +1 -1
- package/dist/vite.d.ts +11 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +20 -1
- package/dist/vite.js.map +1 -1
- package/package.json +1 -1
- package/claude-skills/console-check-sweetlink/SKILL.md +0 -330
- package/claude-skills/console-check-sweetlink/examples.md +0 -394
- package/claude-skills/resize-for-claude/SKILL.md +0 -97
- package/claude-skills/responsive-screenshots/SKILL.md +0 -366
- package/claude-skills/responsive-screenshots/examples.md +0 -441
package/README.md
CHANGED
|
@@ -92,6 +92,8 @@ That's it! The plugin automatically:
|
|
|
92
92
|
- Starts the Sweetlink server when Vite starts
|
|
93
93
|
- Detects Vite's port and configures everything
|
|
94
94
|
- DevBar connects automatically
|
|
95
|
+
- Exposes a same-origin WebSocket endpoint at `/__sweetlink` for Portless and
|
|
96
|
+
other local HTTPS proxies
|
|
95
97
|
|
|
96
98
|
### For Next.js (Recommended)
|
|
97
99
|
|
|
@@ -109,6 +111,7 @@ That's it! The plugin automatically:
|
|
|
109
111
|
- Detects the port from `--port` argv (e.g., `next dev --port 3002`)
|
|
110
112
|
- Falls back to `process.env.PORT`, then `3000`
|
|
111
113
|
- Starts the WebSocket server on `appPort + 6223`
|
|
114
|
+
- Injects public Sweetlink port hints for proxied local URLs such as Portless
|
|
112
115
|
- No-ops in production
|
|
113
116
|
|
|
114
117
|
Works with other wrappers too:
|
|
@@ -227,6 +230,10 @@ pnpm sweetlink screenshot
|
|
|
227
230
|
# Element screenshot
|
|
228
231
|
pnpm sweetlink screenshot --selector ".company-card"
|
|
229
232
|
|
|
233
|
+
# Capture app UI without DevBar chrome
|
|
234
|
+
pnpm sweetlink screenshot --hide-devbar
|
|
235
|
+
pnpm sweetlink screenshot --hifi --hide-devbar
|
|
236
|
+
|
|
230
237
|
# Full page with custom output
|
|
231
238
|
pnpm sweetlink screenshot --full-page --output page.png
|
|
232
239
|
|
|
@@ -249,6 +256,76 @@ pnpm sweetlink screenshot --force-cdp # Playwright/CDP
|
|
|
249
256
|
pnpm sweetlink screenshot --force-ws # WebSocket/html2canvas
|
|
250
257
|
```
|
|
251
258
|
|
|
259
|
+
### Hide DevBar for screenshots
|
|
260
|
+
|
|
261
|
+
Use `--hide-devbar` when the toolbar should not appear in captured evidence. The flag works with the default WebSocket/html2canvas path, Playwright/CDP fallback, `--hifi`, and `--responsive`.
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
pnpm sweetlink screenshot --hide-devbar --output app.png
|
|
265
|
+
pnpm sweetlink screenshot --hifi --hide-devbar --full-page
|
|
266
|
+
pnpm sweetlink screenshot --responsive --hide-devbar
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
JavaScript and Playwright callers can use the same behavior:
|
|
270
|
+
|
|
271
|
+
```ts
|
|
272
|
+
import {
|
|
273
|
+
installAutoHideDevbarScreenshots,
|
|
274
|
+
installAutoHideDevbarScreenshotsForContext,
|
|
275
|
+
screenshotViaPlaywright,
|
|
276
|
+
withHiddenDevbarForScreenshot,
|
|
277
|
+
} from '@ytspar/sweetlink/playwright';
|
|
278
|
+
|
|
279
|
+
await screenshotViaPlaywright({
|
|
280
|
+
url: 'http://localhost:5173',
|
|
281
|
+
output: 'app.png',
|
|
282
|
+
hideDevbar: true,
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
await withHiddenDevbarForScreenshot(page, () =>
|
|
286
|
+
page.screenshot({ path: 'app-without-devbar.png', fullPage: true })
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
// Patch one page so every page.screenshot() hides DevBar automatically.
|
|
290
|
+
const cleanupPageScreenshots = installAutoHideDevbarScreenshots(page);
|
|
291
|
+
await page.screenshot({ path: 'app-without-devbar.png', fullPage: true });
|
|
292
|
+
cleanupPageScreenshots();
|
|
293
|
+
|
|
294
|
+
// Or patch every current/future page in a Playwright context.
|
|
295
|
+
const cleanupContextScreenshots = installAutoHideDevbarScreenshotsForContext(context);
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Playwright fixture example:
|
|
299
|
+
|
|
300
|
+
```ts
|
|
301
|
+
import { test as base } from '@playwright/test';
|
|
302
|
+
import { installAutoHideDevbarScreenshots } from '@ytspar/sweetlink/playwright';
|
|
303
|
+
|
|
304
|
+
export const test = base.extend({
|
|
305
|
+
page: async ({ page }, use) => {
|
|
306
|
+
const cleanup = installAutoHideDevbarScreenshots(page);
|
|
307
|
+
try {
|
|
308
|
+
await use(page);
|
|
309
|
+
} finally {
|
|
310
|
+
cleanup();
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Browser-side capture code can use the shared preparation helper:
|
|
317
|
+
|
|
318
|
+
```ts
|
|
319
|
+
import { prepareForCapture } from '@ytspar/sweetlink/browser/screenshotUtils';
|
|
320
|
+
|
|
321
|
+
const cleanup = prepareForCapture({ hideDevbar: true });
|
|
322
|
+
try {
|
|
323
|
+
// Run html2canvas or another DOM-based capture here.
|
|
324
|
+
} finally {
|
|
325
|
+
cleanup();
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
252
329
|
### DOM Queries
|
|
253
330
|
|
|
254
331
|
```bash
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
import type { ServerInfo } from '../types.js';
|
|
10
10
|
export interface SweetlinkBridgeConfig {
|
|
11
11
|
basePort?: number;
|
|
12
|
+
appPort?: number;
|
|
13
|
+
wsPort?: number;
|
|
14
|
+
wsUrl?: string;
|
|
15
|
+
wsPath?: string;
|
|
12
16
|
maxPortRetries?: number;
|
|
13
17
|
hmrScreenshots?: boolean;
|
|
14
18
|
hmrDebounceMs?: number;
|
|
@@ -27,6 +31,7 @@ export declare class SweetlinkBridge {
|
|
|
27
31
|
private savedReviewTimeout;
|
|
28
32
|
private hmrState;
|
|
29
33
|
private readonly basePort;
|
|
34
|
+
private readonly wsUrlCandidates;
|
|
30
35
|
private readonly maxPortRetries;
|
|
31
36
|
private readonly hmrScreenshots;
|
|
32
37
|
private readonly hmrConfig;
|
|
@@ -54,6 +59,10 @@ export declare class SweetlinkBridge {
|
|
|
54
59
|
*/
|
|
55
60
|
getServerInfo(): ServerInfo | null;
|
|
56
61
|
private setupErrorHandlers;
|
|
62
|
+
private buildWsUrlCandidates;
|
|
63
|
+
private getWsUrlForTarget;
|
|
64
|
+
private getPortForTarget;
|
|
65
|
+
private connectNextTarget;
|
|
57
66
|
private connectWebSocket;
|
|
58
67
|
private handleCommand;
|
|
59
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SweetlinkBridge.d.ts","sourceRoot":"","sources":["../../src/browser/SweetlinkBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAc,UAAU,EAAuC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"SweetlinkBridge.d.ts","sourceRoot":"","sources":["../../src/browser/SweetlinkBridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAc,UAAU,EAAuC,MAAM,aAAa,CAAC;AA+C/F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,QAAQ,CAId;IAGF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAGhC,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,OAAO,CAAwB;gBAE3B,MAAM,GAAE,qBAA0B;IAyC9C,2DAA2D;IAC3D,OAAO,CAAC,GAAG;IAIX;;OAEG;IACH,IAAI,IAAI,IAAI;IA8BZ;;OAEG;IACH,OAAO,IAAI,IAAI;IA0Cf;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAQlC,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,gBAAgB;YAiIV,aAAa;CAqC5B;AAQD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,eAAe,CAQnF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C;AAGD,eAAe,eAAe,CAAC"}
|
|
@@ -14,7 +14,7 @@ import { captureHmrScreenshot, setupHmrDetection, } from './hmr.js';
|
|
|
14
14
|
// ============================================================================
|
|
15
15
|
// Constants
|
|
16
16
|
// ============================================================================
|
|
17
|
-
import { DEFAULT_WS_PORT, MAX_PORT_RETRIES, PORT_RETRY_DELAY_MS,
|
|
17
|
+
import { createSameOriginSweetlinkWsUrl, DEFAULT_WS_PORT, getSweetlinkRuntimeConfig, MAX_PORT_RETRIES, PORT_RETRY_DELAY_MS, parsePortNumber, resolveAppPortFromRuntimeConfig, resolveSweetlinkWsPortForAppPort, } from '../types.js';
|
|
18
18
|
/** HMR settings */
|
|
19
19
|
const DEFAULT_HMR_DEBOUNCE_MS = 300;
|
|
20
20
|
const DEFAULT_HMR_CAPTURE_DELAY_MS = 100;
|
|
@@ -42,6 +42,7 @@ export class SweetlinkBridge {
|
|
|
42
42
|
};
|
|
43
43
|
// Configuration
|
|
44
44
|
basePort;
|
|
45
|
+
wsUrlCandidates;
|
|
45
46
|
maxPortRetries;
|
|
46
47
|
hmrScreenshots;
|
|
47
48
|
hmrConfig;
|
|
@@ -62,15 +63,24 @@ export class SweetlinkBridge {
|
|
|
62
63
|
captureDelay: DEFAULT_HMR_CAPTURE_DELAY_MS,
|
|
63
64
|
};
|
|
64
65
|
this.currentAppPort = 0;
|
|
66
|
+
this.wsUrlCandidates = [`ws://localhost:${DEFAULT_WS_PORT}`];
|
|
65
67
|
return;
|
|
66
68
|
}
|
|
67
|
-
// Calculate app
|
|
69
|
+
// Calculate expected app and WS ports from the browser URL.
|
|
70
|
+
const runtimeConfig = getSweetlinkRuntimeConfig(window);
|
|
68
71
|
this.currentAppPort =
|
|
69
|
-
|
|
70
|
-
// Calculate expected WS port (appPort + port offset)
|
|
72
|
+
config.appPort ?? resolveAppPortFromRuntimeConfig(window.location, runtimeConfig);
|
|
71
73
|
this.basePort =
|
|
72
74
|
config.basePort ??
|
|
73
|
-
|
|
75
|
+
config.wsPort ??
|
|
76
|
+
parsePortNumber(runtimeConfig.wsPort) ??
|
|
77
|
+
resolveSweetlinkWsPortForAppPort(this.currentAppPort);
|
|
78
|
+
this.wsUrlCandidates = this.buildWsUrlCandidates(window.location, {
|
|
79
|
+
wsUrl: config.wsUrl ?? runtimeConfig.wsUrl,
|
|
80
|
+
wsPort: config.wsPort ?? config.basePort ?? runtimeConfig.wsPort,
|
|
81
|
+
wsPath: config.wsPath ?? runtimeConfig.wsPath,
|
|
82
|
+
fallbackPort: this.basePort,
|
|
83
|
+
});
|
|
74
84
|
this.maxPortRetries = config.maxPortRetries ?? MAX_PORT_RETRIES;
|
|
75
85
|
this.hmrScreenshots = config.hmrScreenshots ?? false;
|
|
76
86
|
this.hmrConfig = {
|
|
@@ -96,7 +106,7 @@ export class SweetlinkBridge {
|
|
|
96
106
|
this.consoleLogs = this.capture.getLogs();
|
|
97
107
|
});
|
|
98
108
|
this.setupErrorHandlers();
|
|
99
|
-
this.connectWebSocket(this.basePort);
|
|
109
|
+
this.connectWebSocket(this.wsUrlCandidates[0] ?? this.basePort);
|
|
100
110
|
if (this.hmrScreenshots) {
|
|
101
111
|
const cleanup = setupHmrDetection((trigger, changedFile, hmrMetadata) => {
|
|
102
112
|
if (this.verified) {
|
|
@@ -165,22 +175,66 @@ export class SweetlinkBridge {
|
|
|
165
175
|
const cleanup = this.capture.startErrorHandlers();
|
|
166
176
|
this.cleanupFunctions.push(cleanup);
|
|
167
177
|
}
|
|
168
|
-
|
|
169
|
-
const
|
|
178
|
+
buildWsUrlCandidates(location, options) {
|
|
179
|
+
const urls = [];
|
|
180
|
+
const add = (url) => {
|
|
181
|
+
if (url && !urls.includes(url))
|
|
182
|
+
urls.push(url);
|
|
183
|
+
};
|
|
184
|
+
add(options.wsUrl);
|
|
185
|
+
if (options.wsPath) {
|
|
186
|
+
add(createSameOriginSweetlinkWsUrl(location, options.wsPath));
|
|
187
|
+
}
|
|
188
|
+
add(`ws://localhost:${parsePortNumber(options.wsPort) ?? options.fallbackPort}`);
|
|
189
|
+
return urls;
|
|
190
|
+
}
|
|
191
|
+
getWsUrlForTarget(target) {
|
|
192
|
+
return typeof target === 'string' ? target : `ws://localhost:${target}`;
|
|
193
|
+
}
|
|
194
|
+
getPortForTarget(targetUrl) {
|
|
195
|
+
try {
|
|
196
|
+
const url = new URL(targetUrl);
|
|
197
|
+
if (url.protocol !== 'ws:' && url.protocol !== 'wss:')
|
|
198
|
+
return null;
|
|
199
|
+
return parsePortNumber(url.port);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
connectNextTarget(targetUrl, delayMs = PORT_RETRY_DELAY_MS) {
|
|
206
|
+
const candidateIndex = this.wsUrlCandidates.indexOf(targetUrl);
|
|
207
|
+
if (candidateIndex >= 0 && candidateIndex + 1 < this.wsUrlCandidates.length) {
|
|
208
|
+
setTimeout(() => this.connectWebSocket(this.wsUrlCandidates[candidateIndex + 1]), delayMs);
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
const targetPort = this.getPortForTarget(targetUrl);
|
|
212
|
+
if (targetPort !== null) {
|
|
213
|
+
const nextPort = targetPort + 1;
|
|
214
|
+
if (nextPort < this.basePort + this.maxPortRetries) {
|
|
215
|
+
setTimeout(() => this.connectWebSocket(nextPort), delayMs);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
connectWebSocket(target) {
|
|
222
|
+
const wsUrl = this.getWsUrlForTarget(target);
|
|
170
223
|
const ws = new WebSocket(wsUrl);
|
|
224
|
+
let switchingTargets = false;
|
|
171
225
|
this.ws = ws;
|
|
172
226
|
this.verified = false;
|
|
173
227
|
// Timeout for server-info response
|
|
174
228
|
const verificationTimeout = setTimeout(() => {
|
|
175
229
|
if (!this.verified && ws.readyState === WebSocket.OPEN) {
|
|
176
230
|
// Server didn't send server-info (old version) - accept for backwards compatibility
|
|
177
|
-
this.log(`[Sweetlink] Server on
|
|
231
|
+
this.log(`[Sweetlink] Server on ${wsUrl} is old version (no server-info). Accepting for backwards compatibility.`);
|
|
178
232
|
this.verified = true;
|
|
179
233
|
this.connected = true;
|
|
180
234
|
}
|
|
181
235
|
}, VERIFICATION_TIMEOUT_MS);
|
|
182
236
|
ws.onopen = () => {
|
|
183
|
-
this.log(`[Sweetlink] Connected to server on
|
|
237
|
+
this.log(`[Sweetlink] Connected to server on ${wsUrl}`);
|
|
184
238
|
ws.send(JSON.stringify({ type: 'browser-client-ready' }));
|
|
185
239
|
};
|
|
186
240
|
ws.onmessage = async (event) => {
|
|
@@ -204,12 +258,9 @@ export class SweetlinkBridge {
|
|
|
204
258
|
const serverMatchesApp = info.appPort === null || info.appPort === this.currentAppPort;
|
|
205
259
|
if (!serverMatchesApp) {
|
|
206
260
|
this.log(`[Sweetlink] Server is for port ${info.appPort}, but we're on port ${this.currentAppPort}. Trying next port...`);
|
|
261
|
+
switchingTargets = true;
|
|
207
262
|
ws.close();
|
|
208
|
-
|
|
209
|
-
if (nextPort < this.basePort + this.maxPortRetries) {
|
|
210
|
-
setTimeout(() => this.connectWebSocket(nextPort), PORT_RETRY_DELAY_MS);
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
263
|
+
if (!this.connectNextTarget(wsUrl)) {
|
|
213
264
|
this.log(`[Sweetlink] No matching server found for port ${this.currentAppPort}. Will retry...`);
|
|
214
265
|
setTimeout(() => this.connectWebSocket(this.basePort), PORT_SEARCH_FAIL_RETRY_MS);
|
|
215
266
|
}
|
|
@@ -243,17 +294,19 @@ export class SweetlinkBridge {
|
|
|
243
294
|
ws.onclose = (event) => {
|
|
244
295
|
clearTimeout(verificationTimeout);
|
|
245
296
|
this.log('[Sweetlink] Disconnected from server');
|
|
297
|
+
const wasVerified = this.verified;
|
|
246
298
|
this.connected = false;
|
|
247
299
|
this.serverInfo = null;
|
|
248
300
|
this.verified = false;
|
|
249
301
|
// If closed due to origin mismatch (code 4001), try next port immediately
|
|
250
302
|
if (event.code === 4001) {
|
|
251
|
-
|
|
252
|
-
if (
|
|
253
|
-
this.log(`[Sweetlink] Origin mismatch, trying port ${nextPort}...`);
|
|
254
|
-
setTimeout(() => this.connectWebSocket(nextPort), PORT_RETRY_DELAY_MS);
|
|
303
|
+
this.log(`[Sweetlink] Origin mismatch from ${wsUrl}; trying next target...`);
|
|
304
|
+
if (this.connectNextTarget(wsUrl))
|
|
255
305
|
return;
|
|
256
|
-
|
|
306
|
+
}
|
|
307
|
+
if (!wasVerified && !switchingTargets && this.connectNextTarget(wsUrl)) {
|
|
308
|
+
this.log(`[Sweetlink] Connection closed before verification from ${wsUrl}`);
|
|
309
|
+
return;
|
|
257
310
|
}
|
|
258
311
|
// Try to reconnect
|
|
259
312
|
this.reconnectTimeout = setTimeout(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SweetlinkBridge.js","sourceRoot":"","sources":["../../src/browser/SweetlinkBridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SweetlinkBridge.js","sourceRoot":"","sources":["../../src/browser/SweetlinkBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/browser/commands/screenshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AA4BxB;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/browser/commands/screenshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AA4BxB;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgE7F;AAgBD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,wBAAwB,EACjC,EAAE,EAAE,SAAS,GAAG,IAAI,GACnB,OAAO,CAAC,iBAAiB,CAAC,CA8D5B"}
|
|
@@ -35,12 +35,21 @@ export async function handleScreenshot(command) {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
const { default: html2canvas } = await import('html2canvas-pro');
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
const cleanup = command.hideDevbar ? prepareForCapture({ hideDevbar: true }) : null;
|
|
39
|
+
let canvas;
|
|
40
|
+
try {
|
|
41
|
+
if (cleanup)
|
|
42
|
+
await delay(50);
|
|
43
|
+
canvas = await html2canvas(element, {
|
|
44
|
+
...BASE_CAPTURE_OPTIONS,
|
|
45
|
+
width: window.innerWidth,
|
|
46
|
+
windowWidth: window.innerWidth,
|
|
47
|
+
...command.options,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
cleanup?.();
|
|
52
|
+
}
|
|
44
53
|
// Crop to viewport when not in full-page mode for small file sizes.
|
|
45
54
|
// html2canvas always renders the full element height, so we crop after capture.
|
|
46
55
|
let finalCanvas = canvas;
|
|
@@ -103,7 +112,7 @@ export async function handleRequestScreenshot(command, ws) {
|
|
|
103
112
|
const format = command.format || 'jpeg';
|
|
104
113
|
const quality = command.quality || DEFAULT_SCREENSHOT_QUALITY;
|
|
105
114
|
// Prepare page for capture (hide tooltips, blur active element)
|
|
106
|
-
const cleanup = prepareForCapture();
|
|
115
|
+
const cleanup = prepareForCapture({ hideDevbar: command.hideDevbar });
|
|
107
116
|
await delay(50);
|
|
108
117
|
let originalCanvas;
|
|
109
118
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/browser/commands/screenshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,EACL,iBAAiB,EACjB,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAE/B,kEAAkE;AAClE,MAAM,oBAAoB,GAAG;IAC3B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;CACF,CAAC;AAEX;;;GAGG;AACH,SAAS,cAAc,CAAC,QAA4B;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACpC,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA0B;IAC/D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sBAAsB,OAAO,CAAC,QAAQ,EAAE;gBAC/C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAsB,EAAE;
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/browser/commands/screenshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,13 +53,23 @@ export declare function extractBase64FromDataUrl(dataUrl: string): string;
|
|
|
53
53
|
* @returns The media type ('image/png' or 'image/jpeg')
|
|
54
54
|
*/
|
|
55
55
|
export declare function getMediaTypeFromDataUrl(dataUrl: string): 'image/png' | 'image/jpeg';
|
|
56
|
+
export interface PrepareForCaptureOptions {
|
|
57
|
+
/** Temporarily hide devbar UI chrome from the captured image. */
|
|
58
|
+
hideDevbar?: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Temporarily hide DevBar chrome for screenshot capture.
|
|
62
|
+
*
|
|
63
|
+
* @returns Cleanup function to restore state
|
|
64
|
+
*/
|
|
65
|
+
export declare function hideDevbarForCapture(): () => void;
|
|
56
66
|
/**
|
|
57
|
-
* Prepare the page for screenshot capture
|
|
58
|
-
* Blurs active element
|
|
67
|
+
* Prepare the page for screenshot capture.
|
|
68
|
+
* Blurs active element, adds capturing class to body, and optionally hides DevBar chrome.
|
|
59
69
|
*
|
|
60
70
|
* @returns Cleanup function to restore state
|
|
61
71
|
*/
|
|
62
|
-
export declare function prepareForCapture(): () => void;
|
|
72
|
+
export declare function prepareForCapture(options?: PrepareForCaptureOptions): () => void;
|
|
63
73
|
/**
|
|
64
74
|
* Wait for a specified delay (useful for letting UI settle)
|
|
65
75
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshotUtils.d.ts","sourceRoot":"","sources":["../../src/browser/screenshotUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,sCAAsC;AACtC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,2BAA2B;AAC3B,eAAO,MAAM,0BAA0B,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshotUtils.d.ts","sourceRoot":"","sources":["../../src/browser/screenshotUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,sCAAsC;AACtC,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,2BAA2B;AAC3B,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAgB9C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,cAAc,EAAE,iBAAiB,EACjC,OAAO,EAAE,kBAAkB,GAC1B,iBAAiB,CAiBnB;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAOjG;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,CAEnF;AAMD,MAAM,WAAW,wBAAwB;IACvC,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,IAAI,CAcjD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,MAAM,IAAI,CAapF;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAMD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpF"}
|
|
@@ -11,6 +11,15 @@
|
|
|
11
11
|
export const DEFAULT_SCREENSHOT_SCALE = 0.25;
|
|
12
12
|
/** Default JPEG quality */
|
|
13
13
|
export const DEFAULT_SCREENSHOT_QUALITY = 0.7;
|
|
14
|
+
const HIDE_DEVBAR_STYLE_ID = 'sweetlink-hide-devbar-for-capture';
|
|
15
|
+
const HIDE_DEVBAR_CSS = `
|
|
16
|
+
[data-devbar],
|
|
17
|
+
[data-devbar-overlay],
|
|
18
|
+
[data-devbar-tooltip] {
|
|
19
|
+
visibility: hidden !important;
|
|
20
|
+
pointer-events: none !important;
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
14
23
|
/**
|
|
15
24
|
* Scale a canvas down to a smaller size
|
|
16
25
|
*
|
|
@@ -64,21 +73,38 @@ export function extractBase64FromDataUrl(dataUrl) {
|
|
|
64
73
|
export function getMediaTypeFromDataUrl(dataUrl) {
|
|
65
74
|
return dataUrl.startsWith('data:image/png') ? 'image/png' : 'image/jpeg';
|
|
66
75
|
}
|
|
67
|
-
// ============================================================================
|
|
68
|
-
// Screenshot Capture Helpers
|
|
69
|
-
// ============================================================================
|
|
70
76
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
77
|
+
* Temporarily hide DevBar chrome for screenshot capture.
|
|
78
|
+
*
|
|
79
|
+
* @returns Cleanup function to restore state
|
|
80
|
+
*/
|
|
81
|
+
export function hideDevbarForCapture() {
|
|
82
|
+
const existing = document.getElementById(HIDE_DEVBAR_STYLE_ID);
|
|
83
|
+
if (existing) {
|
|
84
|
+
return () => { };
|
|
85
|
+
}
|
|
86
|
+
const style = document.createElement('style');
|
|
87
|
+
style.id = HIDE_DEVBAR_STYLE_ID;
|
|
88
|
+
style.textContent = HIDE_DEVBAR_CSS;
|
|
89
|
+
document.head.appendChild(style);
|
|
90
|
+
return () => {
|
|
91
|
+
style.remove();
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Prepare the page for screenshot capture.
|
|
96
|
+
* Blurs active element, adds capturing class to body, and optionally hides DevBar chrome.
|
|
73
97
|
*
|
|
74
98
|
* @returns Cleanup function to restore state
|
|
75
99
|
*/
|
|
76
|
-
export function prepareForCapture() {
|
|
100
|
+
export function prepareForCapture(options = {}) {
|
|
77
101
|
document.body.classList.add('devbar-capturing');
|
|
78
102
|
if (document.activeElement instanceof HTMLElement) {
|
|
79
103
|
document.activeElement.blur();
|
|
80
104
|
}
|
|
105
|
+
const cleanupDevbar = options.hideDevbar ? hideDevbarForCapture() : null;
|
|
81
106
|
return () => {
|
|
107
|
+
cleanupDevbar?.();
|
|
82
108
|
document.body.classList.remove('devbar-capturing');
|
|
83
109
|
};
|
|
84
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshotUtils.js","sourceRoot":"","sources":["../../src/browser/screenshotUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,sCAAsC;AACtC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,2BAA2B;AAC3B,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"screenshotUtils.js","sourceRoot":"","sources":["../../src/browser/screenshotUtils.ts"],"names":[],"mappings":"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"}
|
package/dist/cdp.d.ts
CHANGED
package/dist/cdp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../src/cdp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAA6B,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cdp.d.ts","sourceRoot":"","sources":["../src/cdp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAA6B,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA0B/E;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAOlD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CActD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BtE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA2H7D;AAKD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCjE;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CACpF,KAAK,CAAC;IACJ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CACH,CAmDA"}
|
package/dist/cdp.js
CHANGED
|
@@ -16,6 +16,15 @@ const NETWORK_IDLE_TIMEOUT_MS = 10000;
|
|
|
16
16
|
const NETWORK_IDLE_TIME_MS = 500;
|
|
17
17
|
const SELECTOR_TIMEOUT_MS = 5000;
|
|
18
18
|
const HOVER_TRANSITION_DELAY_MS = 300;
|
|
19
|
+
const HIDE_DEVBAR_STYLE_ID = 'sweetlink-hide-devbar-for-screenshot';
|
|
20
|
+
const HIDE_DEVBAR_CSS = `
|
|
21
|
+
[data-devbar],
|
|
22
|
+
[data-devbar-overlay],
|
|
23
|
+
[data-devbar-tooltip] {
|
|
24
|
+
visibility: hidden !important;
|
|
25
|
+
pointer-events: none !important;
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
19
28
|
const NETWORK_REQUEST_COLLECT_DELAY_MS = 2000;
|
|
20
29
|
/**
|
|
21
30
|
* Check if Chrome DevTools Protocol is available
|
|
@@ -137,9 +146,31 @@ export async function screenshotViaCDP(options) {
|
|
|
137
146
|
throw new Error(`Failed to find element "${options.selector}": ${error instanceof Error ? error.message : error}`);
|
|
138
147
|
}
|
|
139
148
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
149
|
+
let devbarHidden = false;
|
|
150
|
+
if (options.hideDevbar) {
|
|
151
|
+
devbarHidden = await page.evaluate((styleId, css) => {
|
|
152
|
+
if (document.getElementById(styleId))
|
|
153
|
+
return false;
|
|
154
|
+
const style = document.createElement('style');
|
|
155
|
+
style.id = styleId;
|
|
156
|
+
style.textContent = css;
|
|
157
|
+
document.head.appendChild(style);
|
|
158
|
+
return true;
|
|
159
|
+
}, HIDE_DEVBAR_STYLE_ID, HIDE_DEVBAR_CSS);
|
|
160
|
+
}
|
|
161
|
+
let buffer;
|
|
162
|
+
try {
|
|
163
|
+
// Take the screenshot
|
|
164
|
+
const screenshot = await page.screenshot(screenshotOptions);
|
|
165
|
+
buffer = Buffer.from(screenshot);
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
if (devbarHidden) {
|
|
169
|
+
await page.evaluate((styleId) => {
|
|
170
|
+
document.getElementById(styleId)?.remove();
|
|
171
|
+
}, HIDE_DEVBAR_STYLE_ID);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
143
174
|
// Save to file if output path provided
|
|
144
175
|
if (options.output) {
|
|
145
176
|
fs.writeFileSync(options.output, buffer);
|