Files
kjol/go/jsruntime/auth/checkBundleVersion.js

52 lines
1.5 KiB
JavaScript

let bundleStaleNotified = false;
export function checkBundleVersion(response) {
const serverVersion = response.headers.get("X-Bundle-Version");
const clientVersion = window.__BUNDLE_VERSION__;
if (!serverVersion || !clientVersion || serverVersion === clientVersion) {
return;
}
if (bundleStaleNotified) {
return;
}
bundleStaleNotified = true;
const bar = document.createElement("div");
bar.setAttribute("role", "status");
bar.style.cssText = [
"position:fixed",
"top:0",
"left:0",
"right:0",
"z-index:99999",
"padding:12px 16px",
"background:#141620",
"color:#fff",
"text-align:center",
"font:14px system-ui,sans-serif",
"box-shadow:0 2px 8px rgba(0,0,0,0.2)",
].join(";");
const message = document.createElement("span");
message.textContent = "A new version of National CD Rateline is available.";
const button = document.createElement("button");
button.type = "button";
button.textContent = "Refresh";
button.style.cssText = "margin-left:12px;padding:4px 12px;cursor:pointer;border:0;border-radius:4px;background:#fff;color:#141620;font:inherit";
button.addEventListener("click", () => {
window.location.reload();
});
bar.append(message, button);
document.body.prepend(bar);
}
export async function apiFetch(url, options) {
const response = await fetch(url, options);
checkBundleVersion(response);
return response;
}