/// import CancellationToken from 'cancellationtoken'; import { ProtectedOperation } from './ProtectedOperation'; import { IDisposable } from './IDisposable'; import StrictEventEmitter from 'strict-event-emitter-types'; import { EventEmitter } from 'events'; /** * Describes the events that can be fired from {@linkcode IAuthorizationService} */ export interface AuthorizationServiceEvents { credentialsChanged: () => void; authorizationChanged: () => void; } /** * The {@linkcode StrictEventEmitter} extended by {@linkcode IAuthorizationService} */ export type AuthorizationServiceEmitter = StrictEventEmitter; /** * Defines an authorization service to determine user permissions. * Emits events on authorization and credential changes. */ export interface IAuthorizationService extends IDisposable, AuthorizationServiceEmitter { /** * Gets the user's credentials * @param cancellationToken A cancellation token */ getCredentials(cancellationToken?: CancellationToken): Promise<{ [key: string]: string; }>; /** * Checks if a user is authorized to perform a certain operation * @param operation The operation to perform * @param cancellationToken A cancellation token */ checkAuthorization(operation: ProtectedOperation, cancellationToken?: CancellationToken): Promise; }