EduBoardAPI 1.1.1

API Wrapper For Bangladesh Education Board Website
Documentation
const form = document.getElementById("fetchForm");
const resultBox = document.getElementById("resultBox");
const statusText = document.getElementById("statusText");
const submitBtn = document.getElementById("submitBtn");
const btnText = submitBtn?.querySelector(".btn-text");
const btnLoading = submitBtn?.querySelector(".btn-loading");
const copyCurlBtn = document.getElementById("copyCurl");
const curlSnippet = document.getElementById("curlSnippet");

copyCurlBtn?.addEventListener("click", async () => {
  const snippet = curlSnippet?.innerText ?? "";

  try {
    await navigator.clipboard.writeText(snippet);
    copyCurlBtn.textContent = "Copied";
    setTimeout(() => {
      copyCurlBtn.textContent = "Copy";
    }, 1200);
  } catch (_error) {
    copyCurlBtn.textContent = "Cannot copy";
    setTimeout(() => {
      copyCurlBtn.textContent = "Copy";
    }, 1200);
  }
});

submitBtn?.addEventListener("click", async (event) => {
  event.preventDefault();

  const formData = new FormData(form);
  const payload = {
    exam: String(formData.get("exam") ?? "").trim(),
    year: String(formData.get("year") ?? "").trim(),
    board: String(formData.get("board") ?? "").trim(),
    roll: String(formData.get("roll") ?? "").trim(),
    reg: String(formData.get("reg") ?? "").trim(),
  };

  submitBtn.disabled = true;
  btnText.style.display = "none";
  btnLoading.style.display = "inline";
  statusText.textContent = "Requesting...";
  resultBox.textContent = "Loading...";

  try {
    const response = await fetch("/fetch", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(payload),
    });

    const textBody = await response.text();
    let parsed;

    try {
      parsed = JSON.parse(textBody);
    } catch (_error) {
      parsed = { raw: textBody };
    }

    statusText.textContent = `${response.status} ${response.statusText}`;
    resultBox.textContent = JSON.stringify(parsed, null, 2);
  } catch (error) {
    statusText.textContent = "Network error";
    resultBox.textContent = JSON.stringify(
      { error: error instanceof Error ? error.message : "Unknown error" },
      null,
      2
    );
  } finally {
    submitBtn.disabled = false;
    btnText.style.display = "inline";
    btnLoading.style.display = "none";
  }
});