Differential Revision: https://phabricator.services.mozilla.com/D281922
66 lines
2.3 KiB
JavaScript
66 lines
2.3 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
// @ts-nocheck - TODO - Remove this to type check this file.
|
|
|
|
/**
|
|
* Security audit logger for AI Window policy decisions.
|
|
* Outputs logs for debugging and development.
|
|
*
|
|
* ## Viewing Logs
|
|
*
|
|
* Logs appear in the Browser Console (Ctrl+Shift+J) and terminal.
|
|
*
|
|
* To enable debug-level output:
|
|
* ./mach run --setpref browser.ml.logLevel=Debug
|
|
*
|
|
* Then filter for "SecurityLogger".
|
|
* For all security & ML/AI related messages filter for "[MLSecurity]".
|
|
*/
|
|
|
|
import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
|
|
|
const lazy = XPCOMUtils.declareLazy({
|
|
EFFECT_DENY: "chrome://global/content/ml/security/DecisionTypes.sys.mjs",
|
|
console: () =>
|
|
console.createInstance({
|
|
maxLogLevelPref: "browser.ml.logLevel",
|
|
prefix: "SecurityLogger",
|
|
}),
|
|
});
|
|
|
|
/**
|
|
* Logs a security decision event.
|
|
*
|
|
* @param {object} event - The security event to log
|
|
* @param {string} event.requestId - Request identifier
|
|
* @param {string} event.sessionId - Session identifier
|
|
* @param {string} event.phase - Security phase (tool.execution, etc.)
|
|
* @param {object} event.action - Action details (type, tool, urls, args)
|
|
* @param {object} event.context - Context summary (tainted, trustedCount)
|
|
* @param {object} event.decision - Policy decision (effect, policyId, code, reason)
|
|
* @param {number} event.durationMs - Evaluation duration in milliseconds
|
|
* @param {Error} [event.error] - Optional error if evaluation failed
|
|
*/
|
|
export function logSecurityEvent(event) {
|
|
const { phase, decision, durationMs, error } = event;
|
|
|
|
// Summary line for quick visibility
|
|
if (error) {
|
|
lazy.console.error(
|
|
`[MLSecurity][${phase}] Security evaluation error:`,
|
|
error.message || error
|
|
);
|
|
} else if (decision.effect === lazy.EFFECT_DENY) {
|
|
lazy.console.warn(
|
|
`[MLSecurity][${phase}] DENY: ${decision.code} - ${decision.reason} (${durationMs}ms)`
|
|
);
|
|
} else {
|
|
lazy.console.debug(`[MLSecurity][${phase}] ALLOW (${durationMs}ms)`);
|
|
}
|
|
|
|
// Full event for detailed debugging (object for Browser Console interactivity)
|
|
lazy.console.debug(`[MLSecurity][${phase}] Event:`, event);
|
|
}
|