addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 3000);

try {
const bodyText = request.method === 'GET' ? null : await request.text();

const response = await fetch('https://script.google.com/macros/s/ID/exec', { //ID GAS документа
method: request.method,
headers: request.headers,
body: bodyText,
redirect: 'manual',
signal: controller.signal
});

clearTimeout(timeout);
return response;

} catch (err) {
clearTimeout(timeout);
if (err.name === 'AbortError') {
return new Response(JSON.stringify({ status: 'timeout' }), {
status: 200,
headers: { 'Content-Type': 'application/json' }
});
}
return new Response(JSON.stringify({ status: 'error', message: err.message }), {
status: 500,
headers: { 'Content-Type': 'application/json' }
});
}
}