@ytspar/sweetlink 1.22.0 → 1.23.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 +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/dist/types.js
CHANGED
|
@@ -15,6 +15,133 @@ export const WS_PORT_OFFSET = 6223;
|
|
|
15
15
|
export const MAX_PORT_RETRIES = 10;
|
|
16
16
|
/** Delay between port scan attempts (ms) */
|
|
17
17
|
export const PORT_RETRY_DELAY_MS = 100;
|
|
18
|
+
/** Same-origin WebSocket path used when an app server can proxy Sweetlink. */
|
|
19
|
+
export const SWEETLINK_WS_PATH = '/__sweetlink';
|
|
20
|
+
export function parsePortNumber(value) {
|
|
21
|
+
if (value === null || value === undefined || value === '') {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const parsed = typeof value === 'number' ? value : Number(value);
|
|
25
|
+
return Number.isInteger(parsed) && parsed > 0 && parsed <= 65535 ? parsed : null;
|
|
26
|
+
}
|
|
27
|
+
export function getDefaultPortForProtocol(protocol) {
|
|
28
|
+
if (protocol === 'http:') {
|
|
29
|
+
return 80;
|
|
30
|
+
}
|
|
31
|
+
if (protocol === 'https:') {
|
|
32
|
+
return 443;
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
export function resolveAppPortFromLocation(location) {
|
|
37
|
+
return parsePortNumber(location.port) ?? getDefaultPortForProtocol(location.protocol) ?? 0;
|
|
38
|
+
}
|
|
39
|
+
export function resolveSweetlinkWsPortForAppPort(appPort) {
|
|
40
|
+
const parsedAppPort = parsePortNumber(appPort);
|
|
41
|
+
return parsedAppPort ? parsedAppPort + WS_PORT_OFFSET : DEFAULT_WS_PORT;
|
|
42
|
+
}
|
|
43
|
+
export function resolveSweetlinkWsPortFromLocation(location) {
|
|
44
|
+
return resolveSweetlinkWsPortForAppPort(resolveAppPortFromLocation(location));
|
|
45
|
+
}
|
|
46
|
+
function getRecord(value) {
|
|
47
|
+
return value && typeof value === 'object' ? value : null;
|
|
48
|
+
}
|
|
49
|
+
function getProcessEnv() {
|
|
50
|
+
if (typeof process === 'undefined')
|
|
51
|
+
return {};
|
|
52
|
+
return process.env;
|
|
53
|
+
}
|
|
54
|
+
function normalizeWsPath(value) {
|
|
55
|
+
if (typeof value !== 'string' || value.trim() === '')
|
|
56
|
+
return null;
|
|
57
|
+
const path = value.trim();
|
|
58
|
+
return path.startsWith('/') ? path : `/${path}`;
|
|
59
|
+
}
|
|
60
|
+
function normalizeWsUrl(value) {
|
|
61
|
+
if (typeof value !== 'string' || value.trim() === '')
|
|
62
|
+
return null;
|
|
63
|
+
try {
|
|
64
|
+
const url = new URL(value);
|
|
65
|
+
return url.protocol === 'ws:' || url.protocol === 'wss:' ? url.toString() : null;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Read Sweetlink connection hints injected by framework integrations.
|
|
73
|
+
*
|
|
74
|
+
* Vite injects `window.__SWEETLINK__`; Next.js exposes the same values through
|
|
75
|
+
* `NEXT_PUBLIC_SWEETLINK_*` env replacement. Explicit user options should still
|
|
76
|
+
* take precedence over these hints.
|
|
77
|
+
*/
|
|
78
|
+
export function getSweetlinkRuntimeConfig(globalValue = globalThis) {
|
|
79
|
+
const globalRecord = getRecord(globalValue);
|
|
80
|
+
const nested = getRecord(globalRecord?.__SWEETLINK__);
|
|
81
|
+
const env = getProcessEnv();
|
|
82
|
+
const appPort = globalRecord?.__SWEETLINK_APP_PORT__ ?? nested?.appPort ?? env.NEXT_PUBLIC_SWEETLINK_APP_PORT;
|
|
83
|
+
const wsPort = globalRecord?.__SWEETLINK_WS_PORT__ ?? nested?.wsPort ?? env.NEXT_PUBLIC_SWEETLINK_WS_PORT;
|
|
84
|
+
return {
|
|
85
|
+
appPort: typeof appPort === 'string' || typeof appPort === 'number' ? appPort : null,
|
|
86
|
+
wsPort: typeof wsPort === 'string' || typeof wsPort === 'number' ? wsPort : null,
|
|
87
|
+
wsUrl: normalizeWsUrl(globalRecord?.__SWEETLINK_WS_URL__ ?? nested?.wsUrl) ??
|
|
88
|
+
normalizeWsUrl(env.NEXT_PUBLIC_SWEETLINK_WS_URL),
|
|
89
|
+
wsPath: normalizeWsPath(globalRecord?.__SWEETLINK_WS_PATH__ ?? nested?.wsPath) ??
|
|
90
|
+
normalizeWsPath(env.NEXT_PUBLIC_SWEETLINK_WS_PATH),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function resolveAppPortFromRuntimeConfig(location, config) {
|
|
94
|
+
return parsePortNumber(config.appPort) ?? resolveAppPortFromLocation(location);
|
|
95
|
+
}
|
|
96
|
+
export function createSameOriginSweetlinkWsUrl(location, path = SWEETLINK_WS_PATH) {
|
|
97
|
+
if (!location.host)
|
|
98
|
+
return null;
|
|
99
|
+
const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
100
|
+
return `${protocol}//${location.host}${normalizeWsPath(path) ?? SWEETLINK_WS_PATH}`;
|
|
101
|
+
}
|
|
102
|
+
export function isLocalDevelopmentHostname(hostname) {
|
|
103
|
+
const normalized = hostname.toLowerCase().replace(/\.$/, '');
|
|
104
|
+
return (normalized === 'localhost' ||
|
|
105
|
+
normalized === '127.0.0.1' ||
|
|
106
|
+
normalized === '::1' ||
|
|
107
|
+
normalized === '[::1]' ||
|
|
108
|
+
normalized.endsWith('.localhost') ||
|
|
109
|
+
normalized.endsWith('.test') ||
|
|
110
|
+
normalized.endsWith('.local'));
|
|
111
|
+
}
|
|
112
|
+
export function parseLocalDevelopmentUrl(value) {
|
|
113
|
+
if (!value?.trim()) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const url = new URL(value);
|
|
118
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return isLocalDevelopmentHostname(url.hostname) ? url : null;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export function isLocalDevelopmentOrigin(origin) {
|
|
128
|
+
const url = parseLocalDevelopmentUrl(origin);
|
|
129
|
+
return Boolean(url && url.pathname === '/' && !url.search && !url.hash && !url.username && !url.password);
|
|
130
|
+
}
|
|
131
|
+
export function resolveAppPortFromLocalUrl(value) {
|
|
132
|
+
const url = parseLocalDevelopmentUrl(value);
|
|
133
|
+
if (!url) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
return parsePortNumber(url.port) ?? getDefaultPortForProtocol(url.protocol);
|
|
137
|
+
}
|
|
138
|
+
export function localOriginMatchesAppPort(origin, appPort) {
|
|
139
|
+
const parsedAppPort = parsePortNumber(appPort);
|
|
140
|
+
const originAppPort = isLocalDevelopmentOrigin(origin)
|
|
141
|
+
? resolveAppPortFromLocalUrl(origin)
|
|
142
|
+
: null;
|
|
143
|
+
return parsedAppPort !== null && originAppPort === parsedAppPort;
|
|
144
|
+
}
|
|
18
145
|
// ============================================================================
|
|
19
146
|
// Type Guards
|
|
20
147
|
// ============================================================================
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,8CAA8C;AAC9C,+EAA+E;AAE/E,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/vite.d.ts
CHANGED
|
@@ -33,6 +33,17 @@ export interface SweetlinkPluginOptions {
|
|
|
33
33
|
* Default: false
|
|
34
34
|
*/
|
|
35
35
|
headed?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Expose Sweetlink on the app origin at /__sweetlink.
|
|
38
|
+
* This lets HTTPS local proxies such as Portless use wss://<app>/__sweetlink.
|
|
39
|
+
* Default: true
|
|
40
|
+
*/
|
|
41
|
+
sameOrigin?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Same-origin WebSocket path. Only used when sameOrigin is enabled.
|
|
44
|
+
* Default: /__sweetlink
|
|
45
|
+
*/
|
|
46
|
+
wsPath?: string;
|
|
36
47
|
}
|
|
37
48
|
/**
|
|
38
49
|
* Vite plugin for automatic Sweetlink integration
|
package/dist/vite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAInC,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,sBAA2B,GAAG,MAAM,CA+EtE;AAGD,eAAe,SAAS,CAAC"}
|
package/dist/vite.js
CHANGED
|
@@ -15,11 +15,14 @@
|
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
17
|
import { closeSweetlink, initSweetlink } from './server/index.js';
|
|
18
|
-
import { WS_PORT_OFFSET } from './types.js';
|
|
18
|
+
import { SWEETLINK_WS_PATH, WS_PORT_OFFSET } from './types.js';
|
|
19
19
|
/**
|
|
20
20
|
* Vite plugin for automatic Sweetlink integration
|
|
21
21
|
*/
|
|
22
22
|
export function sweetlink(options = {}) {
|
|
23
|
+
let appPort = 5173;
|
|
24
|
+
let actualWsPort = appPort + WS_PORT_OFFSET;
|
|
25
|
+
const wsPath = options.wsPath ?? SWEETLINK_WS_PATH;
|
|
23
26
|
return {
|
|
24
27
|
name: 'sweetlink',
|
|
25
28
|
apply: 'serve', // Only run in dev mode
|
|
@@ -30,12 +33,19 @@ export function sweetlink(options = {}) {
|
|
|
30
33
|
await closeSweetlink();
|
|
31
34
|
const address = viteServer.httpServer?.address();
|
|
32
35
|
const vitePort = typeof address === 'object' && address ? address.port : 5173;
|
|
36
|
+
appPort = vitePort;
|
|
33
37
|
// Calculate WebSocket port (matches GlobalDevBar's calculation)
|
|
34
38
|
const wsPort = options.port ?? vitePort + WS_PORT_OFFSET;
|
|
39
|
+
actualWsPort = wsPort;
|
|
35
40
|
initSweetlink({
|
|
36
41
|
port: wsPort,
|
|
37
42
|
appPort: vitePort,
|
|
43
|
+
appServer: options.sameOrigin === false
|
|
44
|
+
? undefined
|
|
45
|
+
: viteServer.httpServer,
|
|
46
|
+
wsPath,
|
|
38
47
|
onReady: (actualPort) => {
|
|
48
|
+
actualWsPort = actualPort;
|
|
39
49
|
if (actualPort !== wsPort) {
|
|
40
50
|
console.log(`[Sweetlink] Using port ${actualPort} (${wsPort} was in use)`);
|
|
41
51
|
}
|
|
@@ -61,6 +71,15 @@ export function sweetlink(options = {}) {
|
|
|
61
71
|
}
|
|
62
72
|
});
|
|
63
73
|
},
|
|
74
|
+
transformIndexHtml() {
|
|
75
|
+
return [
|
|
76
|
+
{
|
|
77
|
+
tag: 'script',
|
|
78
|
+
injectTo: 'head-prepend',
|
|
79
|
+
children: `window.__SWEETLINK__=Object.assign({},window.__SWEETLINK__,{appPort:${appPort},wsPort:${actualWsPort},wsPath:${JSON.stringify(wsPath)}});window.__SWEETLINK_APP_PORT__=${appPort};window.__SWEETLINK_WS_PORT__=${actualWsPort};window.__SWEETLINK_WS_PATH__=${JSON.stringify(wsPath)};`,
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
},
|
|
64
83
|
buildEnd() {
|
|
65
84
|
// Clean up on build end (though this mainly matters for serve mode)
|
|
66
85
|
closeSweetlink();
|
package/dist/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ytspar/sweetlink",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0",
|
|
4
4
|
"description": "Autonomous development toolkit for AI agents - screenshots, DOM queries, console logs, and JavaScript execution via WebSocket and Chrome DevTools Protocol",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"autonomous-development",
|