You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.7 KiB
69 lines
1.7 KiB
import {
|
|
LogLevel,
|
|
createCatalogDiagnostics,
|
|
type DiagnosticCatalog,
|
|
type DiagnosticEvent,
|
|
type Diagnostics
|
|
} from '$libs/logr';
|
|
import type { PermissionCheckInput, PermissionDecision } from '$libs/perm';
|
|
import {
|
|
PERM_MODULE,
|
|
PERM_DIAGNOSTIC_EVENTS,
|
|
PERM_LOG_MSG_DECISION,
|
|
PERM_LOG_MSG_DENIED,
|
|
PERM_LOG_MSG_INDETERMINATE
|
|
} from './consts.ts';
|
|
import type { EnginePermissionsOptions } from './types.ts';
|
|
|
|
export type PermissionDiagnosticType =
|
|
(typeof PERM_DIAGNOSTIC_EVENTS)[keyof typeof PERM_DIAGNOSTIC_EVENTS];
|
|
|
|
export interface PermissionDiagnosticMeta {
|
|
readonly action: PermissionCheckInput['action'];
|
|
readonly resource: PermissionCheckInput['resource'];
|
|
readonly decision: PermissionDecision;
|
|
}
|
|
|
|
export type PermissionDiagnosticEvent = DiagnosticEvent<
|
|
PermissionDiagnosticType,
|
|
PermissionDiagnosticMeta
|
|
>;
|
|
export type PermissionDiagnostics = Diagnostics<PermissionDiagnosticEvent>;
|
|
|
|
const PERM_DIAGNOSTIC_LOGS: DiagnosticCatalog<PermissionDiagnosticEvent> = {
|
|
[PERM_DIAGNOSTIC_EVENTS.DECISION]: {
|
|
level: LogLevel.DEBUG,
|
|
message: PERM_LOG_MSG_DECISION
|
|
},
|
|
[PERM_DIAGNOSTIC_EVENTS.DENIED]: {
|
|
level: LogLevel.WARN,
|
|
message: PERM_LOG_MSG_DENIED
|
|
},
|
|
[PERM_DIAGNOSTIC_EVENTS.INDETERMINATE]: {
|
|
level: LogLevel.WARN,
|
|
message: PERM_LOG_MSG_INDETERMINATE
|
|
}
|
|
};
|
|
|
|
export function createPermissionDiagnostics(
|
|
logger?: EnginePermissionsOptions['logger']
|
|
): PermissionDiagnostics {
|
|
return createCatalogDiagnostics({
|
|
logger,
|
|
defaultCategory: PERM_MODULE,
|
|
catalog: PERM_DIAGNOSTIC_LOGS
|
|
});
|
|
}
|
|
|
|
export function emitPermissionDiagnostic(
|
|
diagnostics: PermissionDiagnostics,
|
|
type: PermissionDiagnosticType,
|
|
meta: PermissionDiagnosticMeta
|
|
): void {
|
|
diagnostics.emit({
|
|
artifact: PERM_MODULE,
|
|
type,
|
|
meta
|
|
});
|
|
}
|