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

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
});
}

Powered by TurnKey Linux.