1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) })
const PATH_MAP = { '/auth': 'authserver.mojang.com', '/account': 'api.mojang.com', '/session': 'sessionserver.mojang.com', '/services': 'api.minecraftservices.com', '/service': 'api.minecraftservices.com', '/minecraft': 'api.minecraftservices.com' }
async function handleRequest(request) { let url = new URL(request.url)
if (url.pathname.startsWith('/mcauthproxy/')) { url.pathname = url.pathname.replace('/mcauthproxy', '') }
if (url.pathname === '/' || url.pathname === '' || url.pathname === '/favicon.ico') { return new Response( 'Minecraft Proxy by lxnchan.cn, Service OK.', { status: 200 } ) }
let isMatched = false
for (let prefix in PATH_MAP) { if ( url.pathname === prefix || url.pathname.startsWith(prefix + '/') ) { url.hostname = PATH_MAP[prefix] url.pathname = url.pathname.replace(prefix, '') isMatched = true break } }
if (!isMatched) { return new Response( 'API Not Found, path: ' + url.pathname, { status: 404 } ) }
let headers = new Headers(request.headers) headers.set('Host', url.hostname)
console.log(`Proxy ${request.url} -> ${url.toString()}`)
let modifiedRequest = new Request(url.toString(), { method: request.method, headers: headers, body: ['GET', 'HEAD'].includes(request.method) ? undefined : request.body })
let response = await fetch(modifiedRequest)
return new Response(response.body, { status: response.status, statusText: response.statusText, headers: response.headers }) }
|