T11.2: capture usage events (CR-019)
POST /api/usage/ping writes one page_open UsageEvent per authenticated page load, identity from the session (get_current_user), never from the client. Wired from exactly one place - auth-guard.js's proceed(), after wp-auth-ready - so this can't drift into six separate per-page copies. okta_callback now also writes one login event per sign-in. Verified locally: unauthenticated ping -> 401; a real fake-Okta sign-in writes exactly one login row and one page_open row, no duplicates.
This commit is contained in:
@@ -125,12 +125,40 @@
|
||||
// Nothing replaces it. Every signed-in page mounts the drawer, so there is no page
|
||||
// left that would need a floating fallback pill.
|
||||
|
||||
// ── CR-019: usage ping ───────────────────────────────────────────────────
|
||||
// One page_open event per authenticated load, sent from exactly ONE place
|
||||
// (here) rather than from each page's own script - the shared-chrome lesson
|
||||
// S4 and the token-drift lesson S5 both taught this codebase the hard way.
|
||||
// Fire-and-forget: never blocks reveal(), never retries, never surfaces an
|
||||
// error to the person using the app - a missed usage ping is not something
|
||||
// anyone here should notice happening.
|
||||
var TOOL_BY_PAGE = {
|
||||
'index.html': 'launcher',
|
||||
'work-package-suite.html': 'wizard',
|
||||
'wp-creation-index.html': 'creator',
|
||||
'field.html': 'field_view',
|
||||
'admin.html': 'admin',
|
||||
'users.html': 'directory'
|
||||
};
|
||||
function pingUsage() {
|
||||
var page = (location.pathname.split('/').pop() || 'index.html');
|
||||
var tool = TOOL_BY_PAGE[page] || page.replace(/\.html$/, '');
|
||||
try {
|
||||
fetch('/api/usage/ping', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ tool: tool })
|
||||
}).catch(function () {});
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function proceed(user) {
|
||||
clearTimeout(safety);
|
||||
window.WP_USER = user;
|
||||
reveal();
|
||||
if (window.WP_USER) {
|
||||
window.wpFlags(); // start the feature-flag fetch; pages await it as needed
|
||||
pingUsage();
|
||||
try { document.dispatchEvent(new CustomEvent('wp-auth-ready', { detail: window.WP_USER })); } catch (e) {}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user