// "My Dashboard" shortcut in the top-right nav. Appears when we know who the // visitor is: an authenticated msg session (web wallet sign-in OR the Telegram // Mini App auth bridge) is authoritative; otherwise the last dashboard opened // on this device (ctb.myId, set by my.js) or the tools-page ID. No identity → // no button, so prospects never see it. (function () { 'use strict'; if (/^\/my(\/|$)/.test(location.pathname)) return; var nav = document.querySelector('.nav-actions'); if (!nav) return; // The Suite went live to the whole org but nothing outside its own pages // linked to it, so members could only reach it by knowing the URL. Same // identity test as the dashboard button: if we know who they are, they hold // a position, and a position is a licence to the toolkit. function addSuite() { if (/^\/suite(\/|$)/.test(location.pathname)) return; if (nav.querySelector('a[href="/suite"]')) return; var a = document.createElement('a'); a.className = 'btn btn-secondary'; a.href = '/suite'; a.textContent = '🧰 My Tools'; nav.insertBefore(a, nav.firstChild); } function add(id) { if (!id || !/^\d{1,15}$/.test(String(id))) return; if (document.getElementById('navMyDash')) return; // Several pages already ship their own dashboard button. Injecting a // second one gave members two identical links side by side. if (nav.querySelector('a[href^="/my"]')) return; var a = document.createElement('a'); a.id = 'navMyDash'; a.className = 'btn btn-secondary'; a.href = '/my/' + id; a.textContent = '📊 My Dashboard'; nav.insertBefore(a, nav.firstChild); } var stored = null; try { stored = localStorage.getItem('ctb.myId') || localStorage.getItem('rmc.toolsId'); } catch (e) {} fetch('/api/public/msg-me') .then(function (r) { return r.ok ? r.json() : null; }) .then(function (d) { var id = d && d.id ? d.id : stored; add(id); if (id) addSuite(); }) .catch(function () { add(stored); if (stored) addSuite(); }); })();