diff --git a/package-lock.json b/package-lock.json index aa960cd..6c1b998 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,12 @@ "": { "name": "evilproxy", "version": "0.0.0", + "dependencies": { + "workers": "^0.0.1" + }, "devDependencies": { "@cloudflare/vitest-pool-workers": "^0.12.4", + "@cloudflare/workers-types": "^4.20260605.1", "typescript": "^5.5.2", "vitest": "~3.2.0", "wrangler": "^3.101.0" @@ -217,6 +221,13 @@ "node": ">=16" } }, + "node_modules/@cloudflare/workers-types": { + "version": "4.20260605.1", + "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20260605.1.tgz", + "integrity": "sha512-9YJaGPQwuQYFHoElVhJP40ZmUO/Z2OiBon58sKpHjgwq5btC/B2BZLC45AQ14k+1I+hjcY2z2t2R6uUxU9AqwQ==", + "dev": true, + "license": "MIT OR Apache-2.0" + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2345,6 +2356,11 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-logr": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/node-logr/-/node-logr-0.5.2.tgz", + "integrity": "sha512-roPNxvG+OsefMyfVa5HeO24kRtxA7UB8CtvsR8CfSxaESw+1FTsMf8gkDluG5vppzXrXVCI146PQR2KMaszWig==" + }, "node_modules/ohash": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", @@ -3023,6 +3039,14 @@ "@cloudflare/workerd-windows-64": "1.20260310.1" } }, + "node_modules/workers": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/workers/-/workers-0.0.1.tgz", + "integrity": "sha512-cp2HU5tdKyxOiHg7l8p67R2F07vLT1Hd/h3Xi3dXtoO5NlXml4nkJ48O0EmEkOMtWqEZMWAoNLZfctT3qiP3IA==", + "dependencies": { + "node-logr": ">= 0.0.3" + } + }, "node_modules/wrangler": { "version": "3.114.17", "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.114.17.tgz", diff --git a/package.json b/package.json index d018d02..ad4a8d0 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,12 @@ }, "devDependencies": { "@cloudflare/vitest-pool-workers": "^0.12.4", + "@cloudflare/workers-types": "^4.20260605.1", "typescript": "^5.5.2", "vitest": "~3.2.0", "wrangler": "^3.101.0" + }, + "dependencies": { + "workers": "^0.0.1" } -} \ No newline at end of file +} diff --git a/public/index.html b/public/index.html deleted file mode 100644 index e72f403..0000000 --- a/public/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - Hello, World! - - -

-

This page comes from a static asset stored at `public/index.html` as configured in `wrangler.jsonc`.

- - - - - diff --git a/src/index.ts b/src/index.ts index 1ecdb14..b8b27ee 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,15 +12,35 @@ */ export default { - async fetch(request, env, ctx): Promise { - const url = new URL(request.url); - switch (url.pathname) { - case '/message': - return new Response('Hello, World!'); - case '/random': - return new Response(crypto.randomUUID()); - default: - return new Response('Not Found', { status: 404 }); - } - }, -} satisfies ExportedHandler; + async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise { + + const targetUrl = 'https://related-digital.com'; + + const url = new URL(request.url); + + const destination = `${targetUrl}${url.pathname}${url.search}`; + + const newHeaders = new Headers(request.headers); + + newHeaders.set('Host', new URL(targetUrl).hostname); + + + newHeaders.set('Referer', targetUrl); + + const proxyRequest = new Request(destination, { + method: request.method, + headers: newHeaders, + body: request.body, + redirect: 'follow' + }); + + try { + + const response = await fetch(proxyRequest); + return response; + } catch (e) { + console.error('Proxy failed:', e); + return new Response(`Failed to proxy request to ${targetUrl}`, { status: 502 }); + } + }, +} satisfies ExportedHandler; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 306c6aa..61f2eee 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,9 +3,9 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - "target": "es2024", + "target": "es2022", /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - "lib": ["es2024"], + "lib": ["es2022"], /* Specify what JSX code is generated. */ "jsx": "react-jsx", diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts new file mode 100644 index 0000000..d846b6e --- /dev/null +++ b/worker-configuration.d.ts @@ -0,0 +1,5 @@ +// Generated by Wrangler by running `wrangler types` + +// eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/no-empty-object-type +interface Env { +} diff --git a/wrangler.jsonc b/wrangler.jsonc index fffb13d..edb4597 100644 --- a/wrangler.jsonc +++ b/wrangler.jsonc @@ -1,14 +1,11 @@ { - "name": "", + "name": "evilproxy", "main": "src/index.ts", - "compatibility_date": "", + "compatibility_date": "2026-06-04", "compatibility_flags": [ - "global_fetch_strictly_public" + "global_fetch_strictly_public", + "nodejs_compat" ], - "assets": { - // The path to the directory containing the `index.html` file to be served at `/` - "directory": "./public" - }, "observability": { "enabled": true }