From e0b66ae824923ebddd6de86f52fc2ad1d917ebe6 Mon Sep 17 00:00:00 2001 From: Oliver Date: Mon, 15 Jun 2026 12:17:40 -0300 Subject: [PATCH] fix: unwrap [{data:[...]}] wrapper in server webhook response parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new webhook wraps data in an outer array: [{data: [...]}]. The old parsing only handled {data: [...]} directly, so .data was undefined and the server list ended up empty — causing the location to fall through to the slugified default. --- add.html | 9 +++++++-- assets/js/script.js | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/add.html b/add.html index 6e6ee54..094f26c 100644 --- a/add.html +++ b/add.html @@ -548,8 +548,13 @@ try { const res = await fetch(SERVER_WEBHOOK); const raw = await res.json(); - // Handle both {data: [...]} and flat array/object - const list = raw && Array.isArray(raw.data) ? raw.data : Array.isArray(raw) ? raw : [raw].filter(Boolean); + // Unwrap [{data: [...]}] → {data: [...]} + let data = raw; + if (Array.isArray(raw) && raw.length > 0 && raw[0] && Array.isArray(raw[0].data)) { + data = raw[0]; + } + // Handle {data: [...]}, flat array, or single object + const list = data && Array.isArray(data.data) ? data.data : Array.isArray(data) ? data : [data].filter(Boolean); const servers = list.filter(function(s) { return s && s.server; }); sel.innerHTML = ''; // Determine overall select styling based on lowest availability diff --git a/assets/js/script.js b/assets/js/script.js index 55495cc..9610b37 100644 --- a/assets/js/script.js +++ b/assets/js/script.js @@ -649,8 +649,13 @@ async function initServerLocations() { try { const res = await fetch(SERVER_WEBHOOK); const raw = await res.json(); - // Handle both {data: [...]} and flat array/object - const list = raw && Array.isArray(raw.data) ? raw.data : Array.isArray(raw) ? raw : [raw].filter(Boolean); + // Unwrap [{data: [...]}] → {data: [...]} + let data = raw; + if (Array.isArray(raw) && raw.length > 0 && raw[0] && Array.isArray(raw[0].data)) { + data = raw[0]; + } + // Handle {data: [...]}, flat array, or single object + const list = data && Array.isArray(data.data) ? data.data : Array.isArray(data) ? data : [data].filter(Boolean); const servers = list.filter(function (s) { return s && s.server; }); // Clear existing options