38 Commits

Author SHA1 Message Date
Jorrin
3fab3a39ec Merge pull request #35 from movie-web/dependabot/npm_and_yarn/undici-5.28.3
Bump undici from 5.28.2 to 5.28.3
2024-03-10 22:11:06 +01:00
dependabot[bot]
414b03cd8e Bump undici from 5.28.2 to 5.28.3
Bumps [undici](https://github.com/nodejs/undici) from 5.28.2 to 5.28.3.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.28.2...v5.28.3)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-16 18:42:04 +00:00
William Oldham
f3612d4a4e Merge branch 'master' into dev 2024-01-09 21:37:24 +00:00
mrjvs
f0d858460c Merge pull request #32 from movie-web/remove-arm
Remove ARM 32-bit from publish
2024-01-09 22:01:25 +01:00
William Oldham
9d2df30348 Remove ARM 32-bit from publish 2024-01-09 21:00:23 +00:00
William Oldham
0af2174784 Merge pull request #30 from movie-web/dev
Netlify support but to master this time
2024-01-08 20:58:33 +00:00
mrjvs
b25fc06857 Merge branch 'dev' of github.com:movie-web/simple-proxy into dev 2024-01-08 21:56:40 +01:00
mrjvs
84ac1c6fa1 Fix name in workflow 2024-01-08 21:56:39 +01:00
mrjvs
2d4b1a5848 Merge branch 'master' into dev 2024-01-08 21:55:29 +01:00
mrjvs
6097252cf0 bump version 2024-01-08 21:54:11 +01:00
William Oldham
3769b37e8a Merge pull request #29 from movie-web/netlify
Netlify edge functions support
2024-01-08 20:49:46 +00:00
mrjvs
de07b4882b remove netlify build from release, since it can only be used from git workflow anyway 2024-01-08 21:43:08 +01:00
mrjvs
259b7bf1f7 Remove deploy to netlify from readme 2024-01-08 21:41:43 +01:00
mrjvs
2b77df66ec Add netlify to readme 2024-01-08 21:38:27 +01:00
mrjvs
d907fa36f2 test commit 2024-01-08 21:29:42 +01:00
mrjvs
610ac5db2c add netlify support 2024-01-08 21:28:22 +01:00
mrjvs
ddabde15b6 Try adding netlify edge workers 2024-01-08 20:51:08 +01:00
William Oldham
e09decb8e2 Merge pull request #28 from DenuxPlays/fix/update-docs-link
Fix linkt to proxy documentation
2024-01-07 17:57:55 +00:00
Timon Klinkert
440ae9bd2c Update README.md 2024-01-07 18:51:35 +01:00
mrjvs
d0c5a41c69 Merge pull request #27 from weeryan17/feature/arm-build
Arm build support
2024-01-07 18:49:18 +01:00
weeryan17
6bb6914798 Add docker build to testing 2024-01-07 12:47:41 -05:00
weeryan17
f47e4f9ec1 Update workflows 2024-01-07 12:29:42 -05:00
weeryan17
b16ebe48b0 add rollup to dev dependencies 2024-01-07 12:22:14 -05:00
weeryan17
6828e31497 Whops missed an r 2024-01-07 12:20:42 -05:00
weeryan17
8b26bcf554 Allow building for arm 2024-01-07 12:18:52 -05:00
William Oldham
5a09e0c602 Merge pull request #26 from movie-web/dev
Version 2.1.3: Push updates to support AWS
2024-01-06 20:54:30 +00:00
mrjvs
8852fca320 Merge branch 'master' into dev 2024-01-06 21:53:48 +01:00
William Oldham
1e147a793d Bump version 2024-01-06 20:52:02 +00:00
William Oldham
e88a4f3203 Bump dep versions and add error handling 2024-01-06 20:51:48 +00:00
William Oldham
7dc9d1809f Merge pull request #25 from movie-web/dev
Proxy v2.1.2
2024-01-06 17:48:18 +00:00
William Oldham
02b4dca218 Merge pull request #24 from movie-web/block-more-headers
Block more headers
2024-01-06 17:47:17 +00:00
mrjvs
5faca36cb4 Add ability to do debug logging with REQ_DEBUG=true 2024-01-06 18:44:06 +01:00
mrjvs
ad0ae4aaae Add version identifying on proxy 2024-01-06 18:37:40 +01:00
mrjvs
07a87b4571 Block more headers, where possible 2024-01-06 18:32:53 +01:00
William Oldham
e216a59cbb Merge pull request #23 from movie-web/dev
Version 2.1.1: Fix support for JWT on non-Cloudflare platforms
2024-01-06 14:38:42 +00:00
William Oldham
015f15d2e7 Merge branch 'master' into dev 2024-01-06 14:38:02 +00:00
William Oldham
3a1e8688cc Merge pull request #22 from movie-web/user-agent-support
User agent proxying support
2024-01-06 14:35:40 +00:00
William Oldham
88b1852a91 Merge pull request #20 from movie-web/dev
Simple proxy v2.1.0
2023-12-20 15:39:43 +00:00
14 changed files with 493 additions and 335 deletions

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 60 timeout-minutes: 60
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: pnpm/action-setup@v2 - uses: pnpm/action-setup@v2
with: with:
@@ -20,7 +20,7 @@ jobs:
- name: Install Node.js - name: Install Node.js
uses: actions/setup-node@v3 uses: actions/setup-node@v3
with: with:
node-version: 18 node-version: 20
cache: 'pnpm' cache: 'pnpm'
- name: Install packages - name: Install packages

View File

@@ -14,16 +14,16 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v4
- uses: pnpm/action-setup@v2 - uses: pnpm/action-setup@v2
with: with:
version: latest version: latest
- name: Install Node.js - name: Install Node.js
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: 18 node-version: 20
cache: 'pnpm' cache: 'pnpm'
- name: Install packages - name: Install packages
@@ -41,16 +41,16 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v4
- uses: pnpm/action-setup@v2 - uses: pnpm/action-setup@v2
with: with:
version: latest version: latest
- name: Install Node.js - name: Install Node.js
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: 18 node-version: 20
cache: 'pnpm' cache: 'pnpm'
- name: Install pnpm packages - name: Install pnpm packages
@@ -58,3 +58,17 @@ jobs:
- name: Build Project - name: Build Project
run: pnpm build run: pnpm build
docker:
name: Build docker
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build
uses: docker/build-push-action@v5

View File

@@ -19,17 +19,17 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Setup Docker buildx - name: Setup Docker buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v3
- name: Get version - name: Get version
id: package-version id: package-version
uses: martinbeentjes/npm-get-version-action@main uses: martinbeentjes/npm-get-version-action@main
- name: Log into registry ${{ env.REGISTRY }} - name: Log into registry ${{ env.REGISTRY }}
uses: docker/login-action@v2 uses: docker/login-action@v3
with: with:
registry: ${{ env.REGISTRY }} registry: ${{ env.REGISTRY }}
username: ${{ github.actor }} username: ${{ github.actor }}
@@ -37,7 +37,7 @@ jobs:
- name: Extract Docker metadata - name: Extract Docker metadata
id: meta id: meta
uses: docker/metadata-action@v4 uses: docker/metadata-action@v5
with: with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
flavor: | flavor: |
@@ -47,9 +47,12 @@ jobs:
- name: Build and push Docker image - name: Build and push Docker image
id: build-and-push id: build-and-push
uses: docker/build-push-action@v4 uses: docker/build-push-action@v5
with: with:
push: true push: true
platforms: linux/amd64,linux/arm64
context: . context: .
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max

View File

@@ -12,7 +12,7 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v4
- uses: pnpm/action-setup@v2 - uses: pnpm/action-setup@v2
with: with:
@@ -41,7 +41,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
tag_name: v${{ steps.package-version.outputs.current-version }} tag_name: v${{ steps.package-version.outputs.current-version }}
release_name: Bot v${{ steps.package-version.outputs.current-version }} release_name: Simple-proxy v${{ steps.package-version.outputs.current-version }}
draft: false draft: false
prerelease: false prerelease: false
body: | body: |

1
.gitignore vendored
View File

@@ -5,3 +5,4 @@ node_modules
.output .output
.env .env
dist dist
.netlify

View File

@@ -1,4 +1,4 @@
FROM node:18-alpine as base FROM node:20-alpine as base
WORKDIR /app WORKDIR /app
# Build layer # Build layer

View File

@@ -1,7 +1,7 @@
# simple-proxy # simple-proxy
Simple reverse proxy to bypass CORS, used by [movie-web](https://movie-web.app). Simple reverse proxy to bypass CORS, used by [movie-web](https://movie-web.app).
Read the docs at https://docs.movie-web.app/proxy Read the docs at https://docs.movie-web.app/proxy/introduction
--- ---
@@ -18,3 +18,4 @@ Read the docs at https://docs.movie-web.app/proxy
- cloudflare workers - cloudflare workers
- AWS lambda - AWS lambda
- nodejs - nodejs
- netlify edge functions

4
netlify.toml Normal file
View File

@@ -0,0 +1,4 @@
[build]
command = "pnpm build:netlify"
publish = "."
edge_functions = ".netlify"

View File

@@ -1,9 +1,13 @@
import { join } from "path"; import { join } from "path";
import pkg from "./package.json";
//https://nitro.unjs.io/config //https://nitro.unjs.io/config
export default defineNitroConfig({ export default defineNitroConfig({
noPublicDir: true, noPublicDir: true,
srcDir: "./src", srcDir: "./src",
runtimeConfig: {
version: pkg.version
},
alias: { alias: {
"@": join(__dirname, "src") "@": join(__dirname, "src")
} }

View File

@@ -1,7 +1,7 @@
{ {
"name": "simple-proxy", "name": "simple-proxy",
"private": true, "private": true,
"version": "2.1.1", "version": "2.1.4",
"scripts": { "scripts": {
"prepare": "nitropack prepare", "prepare": "nitropack prepare",
"dev": "nitropack dev", "dev": "nitropack dev",
@@ -9,15 +9,16 @@
"build:cloudflare": "NITRO_PRESET=cloudflare npm run build", "build:cloudflare": "NITRO_PRESET=cloudflare npm run build",
"build:aws": "NITRO_PRESET=aws_lambda npm run build", "build:aws": "NITRO_PRESET=aws_lambda npm run build",
"build:node": "NITRO_PRESET=node-server npm run build", "build:node": "NITRO_PRESET=node-server npm run build",
"build:netlify": "NITRO_PRESET=netlify_edge npm run build",
"start": "node .output/server/index.mjs", "start": "node .output/server/index.mjs",
"lint": "eslint --ext .ts src/", "lint": "eslint --ext .ts src/",
"lint:fix": "eslint --fix --ext .ts src/", "lint:fix": "eslint --fix --ext .ts src/",
"preinstall": "npx only-allow pnpm" "preinstall": "npx only-allow pnpm"
}, },
"dependencies": { "dependencies": {
"h3": "^1.9.0", "h3": "^1.10.0",
"jose": "^5.2.0", "jose": "^5.2.0",
"nitropack": "latest" "nitropack": "^2.8.1"
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^6.7.0", "@typescript-eslint/eslint-plugin": "^6.7.0",
@@ -26,6 +27,12 @@
"eslint-config-airbnb-base": "^15.0.0", "eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^9.0.0", "eslint-config-prettier": "^9.0.0",
"eslint-import-resolver-typescript": "^3.6.0", "eslint-import-resolver-typescript": "^3.6.0",
"eslint-plugin-prettier": "^5.0.0" "eslint-plugin-prettier": "^5.0.0",
"@rollup/wasm-node": "^4.9.4"
},
"pnpm": {
"overrides": {
"rollup": "npm:@rollup/wasm-node"
}
} }
} }

701
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -21,7 +21,9 @@ export default defineEventHandler(async (event) => {
event, event,
status: 200, status: 200,
data: { data: {
message: 'Proxy is working as expected', message: `Proxy is working as expected (v${
useRuntimeConfig(event).version
})`,
}, },
}); });
@@ -39,17 +41,22 @@ export default defineEventHandler(async (event) => {
const token = await createTokenIfNeeded(event); const token = await createTokenIfNeeded(event);
// proxy // proxy
await specificProxyRequest(event, destination, { try {
blacklistedHeaders: getBlacklistedHeaders(), await specificProxyRequest(event, destination, {
fetchOptions: { blacklistedHeaders: getBlacklistedHeaders(),
redirect: 'follow', fetchOptions: {
headers: getProxyHeaders(event.headers), redirect: 'follow',
body, headers: getProxyHeaders(event.headers),
}, body,
onResponse(outputEvent, response) { },
const headers = getAfterResponseHeaders(response.headers, response.url); onResponse(outputEvent, response) {
setResponseHeaders(outputEvent, headers); const headers = getAfterResponseHeaders(response.headers, response.url);
if (token) setTokenHeader(event, token); setResponseHeaders(outputEvent, headers);
}, if (token) setTokenHeader(event, token);
}); },
});
} catch (e) {
console.log('Error fetching', e);
throw e;
}
}); });

View File

@@ -12,11 +12,15 @@ const blacklistedHeaders = [
'cf-ray', 'cf-ray',
'cf-visitor', 'cf-visitor',
'cf-ew-via', 'cf-ew-via',
'cdn-loop',
'x-amzn-trace-id',
'cf-ipcountry',
'x-forwarded-for', 'x-forwarded-for',
'x-forwarded-host', 'x-forwarded-host',
'x-forwarded-proto', 'x-forwarded-proto',
'forwarded', 'forwarded',
'x-real-ip', 'x-real-ip',
'content-length',
...Object.keys(headerMap), ...Object.keys(headerMap),
]; ];

View File

@@ -69,7 +69,15 @@ export async function specificProxyRequest(
opts.fetchOptions?.headers, opts.fetchOptions?.headers,
opts.headers, opts.headers,
); );
(fetchHeaders.forEach as any)(console.log); const headerObj = Object.fromEntries([...(fetchHeaders.entries as any)()]);
if (process.env.REQ_DEBUG === 'true') {
console.log({
type: 'request',
method,
url: target,
headers: headerObj,
});
}
return sendProxy(event, target, { return sendProxy(event, target, {
...opts, ...opts,