initial commit

This commit is contained in:
n 2025-04-30 21:52:02 +01:00
commit 36002bb247
2 changed files with 50 additions and 0 deletions

8
Dockerfile Normal file
View File

@ -0,0 +1,8 @@
FROM denoland/deno:2.3.1
RUN mkdir /app
WORKDIR /app
COPY . /app
EXPOSE 8000
ENTRYPOINT ["deno", "serve", "--unstable-sloppy-imports", "/app"]

42
index.ts Normal file
View File

@ -0,0 +1,42 @@
import { Buffer } from "node:buffer"
import { inflateRawSync } from "node:zlib"
import { parse as parseXML } from "https://deno.land/x/xml@6.0.4/parse.ts"
const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'OPTIONS, POST' }
export default {
async fetch(req) {
if (req.method === 'OPTIONS') return new Response("OK", { headers: corsHeaders })
if (req.method !== 'POST') return new Response("Only POST requests are allowed.", { status: 400 })
const uri = new URL(req.url)
const query = new URLSearchParams(uri.search)
let buffer, inflated, output = null
const body = req.body && await req.text() || false
if (!body) return new Response('POST request must have a body', { status: 400 })
try {
buffer = Buffer.from(body, 'base64')
if (!buffer) return new Response('Failed to convert body to Buffer.', { status: 500 })
} catch (err) {
return new Response(`Failed to convert body to Buffer: ${err}`, { status: 500 })
}
try {
inflated = inflateRawSync(buffer)
if (!inflated) return new Response('Failed to inflate Buffer.', { status: 500 })
} catch (err) {
return new Response(`Failed to inflate Buffer: ${err}`, { status: 500 })
}
try {
output = inflated.toString('utf-8')
if (!output) return new Response('Failed to convert output to UTF-8.', { status: 500 })
} catch (err) {
return new Response(`Failed to convert output to UTF-8: ${err}`, { status: 500 })
}
if (query.has('json')) output = JSON.stringify(parseXML(output))
return new Response(output)
}
}