mirror of
https://github.com/CloakHQ/CloakBrowser.git
synced 2026-06-23 11:41:46 +02:00
43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
/**
|
|||
|
|
* Shared proxy URL parsing for Playwright and Puppeteer wrappers.
|
||
|
|
*/
|
||
|
|
|
||
|
|
export interface ParsedProxy {
|
||
|
|
server: string;
|
||
|
|
username?: string;
|
||
|
|
password?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Parse a proxy URL, extracting credentials into separate fields.
|
||
|
|
*
|
||
|
|
* Handles: "http://user:pass@host:port" -> { server: "http://host:port", username: "user", password: "pass" }
|
||
|
|
* Also handles: no credentials, URL-encoded special chars, socks5://, missing port.
|
||
|
|
*/
|
||
|
|
export function parseProxyUrl(proxy: string): ParsedProxy {
|
||
|
|
let url: URL;
|
||
|
|
try {
|
||
|
|
url = new URL(proxy);
|
||
|
|
} catch {
|
||
|
|
// Not a parseable URL (e.g. bare "host:port") — pass through as-is
|
||
|
|
return { server: proxy };
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!url.username) {
|
||
|
|
return { server: proxy };
|
||
|
|
}
|
||
|
|
|
||
|
|
// Rebuild server URL without credentials
|
||
|
|
const server = `${url.protocol}//${url.hostname}${url.port ? `:${url.port}` : ""}`;
|
||
|
|
|
||
|
|
const result: ParsedProxy = {
|
||
|
|
server,
|
||
|
|
username: decodeURIComponent(url.username),
|
||
|
|
};
|
||
|
|
if (url.password) {
|
||
|
|
result.password = decodeURIComponent(url.password);
|
||
|
|
}
|
||
|
|
|
||
|
|
return result;
|
||
|
|
}
|