3 Commits

Author SHA1 Message Date
William Oldham
67a7c55a88 Merge pull request #16 from movie-web/dev
Simple proxy v2.0.1
2023-10-16 21:34:47 +01:00
mrjvs
37802661ad bump version 2023-10-16 22:25:46 +02:00
mrjvs
c0ce4c9e84 Fix forgotten awaits + prevent double reading 2023-10-16 22:25:37 +02:00
4 changed files with 22 additions and 5 deletions

View File

@@ -1,7 +1,7 @@
{ {
"name": "simple-proxy", "name": "simple-proxy",
"private": true, "private": true,
"version": "2.0.0", "version": "2.0.1",
"scripts": { "scripts": {
"prepare": "nitropack prepare", "prepare": "nitropack prepare",
"dev": "nitropack dev", "dev": "nitropack dev",

View File

@@ -1,3 +1,4 @@
import { getBodyBuffer } from '@/utils/body';
import { import {
getProxyHeaders, getProxyHeaders,
getAfterResponseHeaders, getAfterResponseHeaders,
@@ -11,7 +12,7 @@ export default defineEventHandler(async (event) => {
// parse destination URL // parse destination URL
const destination = getQuery<{ destination?: string }>(event).destination; const destination = getQuery<{ destination?: string }>(event).destination;
if (!destination) if (!destination)
return sendJson({ return await sendJson({
event, event,
status: 400, status: 400,
data: { data: {
@@ -19,12 +20,16 @@ export default defineEventHandler(async (event) => {
}, },
}); });
// read body
const body = await getBodyBuffer(event);
// proxy // proxy
cleanupHeadersBeforeProxy(event); cleanupHeadersBeforeProxy(event);
await proxyRequest(event, destination, { await proxyRequest(event, destination, {
fetchOptions: { fetchOptions: {
redirect: 'follow', redirect: 'follow',
headers: getProxyHeaders(event.headers), headers: getProxyHeaders(event.headers),
body,
}, },
onResponse(outputEvent, response) { onResponse(outputEvent, response) {
const headers = getAfterResponseHeaders(response.headers, response.url); const headers = getAfterResponseHeaders(response.headers, response.url);

13
src/utils/body.ts Normal file
View File

@@ -0,0 +1,13 @@
import { H3Event } from 'h3';
export function hasBody(event: H3Event) {
const method = event.method.toUpperCase();
return ['PUT', 'POST', 'PATCH', 'DELETE'].includes(method);
}
export async function getBodyBuffer(
event: H3Event,
): Promise<Buffer | undefined> {
if (!hasBody(event)) return;
return await readRawBody(event, false);
}

View File

@@ -1,11 +1,10 @@
import { H3Event, EventHandlerRequest } from 'h3'; import { H3Event, EventHandlerRequest } from 'h3';
export function sendJson(ops: { export async function sendJson(ops: {
event: H3Event<EventHandlerRequest>; event: H3Event<EventHandlerRequest>;
data: Record<string, any>; data: Record<string, any>;
status?: number; status?: number;
}) { }) {
setResponseStatus(ops.event, ops.status ?? 200); setResponseStatus(ops.event, ops.status ?? 200);
appendResponseHeader(ops.event, 'content-type', 'application/json'); await send(ops.event, JSON.stringify(ops.data, null, 2), 'application/json');
send(ops.event, JSON.stringify(ops.data, null, 2));
} }