import type { Request } from 'express'; import type { Method } from '../Methods/Method.js'; import type { AuthResponse } from './Authenticator.js'; import type { Adapter } from './Adapter.js'; import type { Properties } from './Properties.js'; import type { Resource } from './Resource.js'; import type { Lock } from './Lock.js'; export type PluginEvent = Exclude; export interface Plugin { baseUrl?: URL; prepareAdapter?: (request: Request, response: AuthResponse, adapter: Adapter) => Promise; prepare?: (request: Request, response: AuthResponse) => Promise; beforeAuth?: (request: Request, response: AuthResponse) => Promise; afterAuth?: (request: Request, response: AuthResponse) => Promise; begin?: (request: Request, response: AuthResponse) => Promise; close?: (request: Request, response: AuthResponse) => Promise; beforeCheckAuthorization?: (request: Request, response: AuthResponse, data: { method: Method; methodName: string; url: URL; }) => Promise; afterCheckAuthorization?: (request: Request, response: AuthResponse, data: { method: Method; methodName: string; url: URL; }) => Promise; beginGet?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preGet?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; properties: Properties; }) => Promise; beforeGet?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; properties: Properties; }) => Promise; afterGet?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; properties: Properties; }) => Promise; beginHead?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preHead?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; properties: Properties; }) => Promise; beforeHead?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; properties: Properties; }) => Promise; afterHead?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; properties: Properties; }) => Promise; beginCopy?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preCopy?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; destination: URL | undefined; depth: string; overwrite: string | undefined; }) => Promise; beforeCopy?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; destination: Resource; exists: boolean; depth: string; overwrite: string | undefined; }) => Promise; afterCopy?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; destination: Resource; exists: boolean; depth: string; overwrite: string | undefined; }) => Promise; beginDelete?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preDelete?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; beforeDelete?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; afterDelete?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; beginLock?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preLock?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; preLockRefresh?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; beforeLockRefresh?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; lock: Lock; }) => Promise; beforeLockProvisional?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; beforeLock?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; lock: Lock; }) => Promise; afterLock?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; lock: Lock; }) => Promise; beginMkcol?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preMkcol?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; beforeMkcol?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; afterMkcol?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; }) => Promise; beginMove?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preMove?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; destination: URL | undefined; overwrite: string | undefined; }) => Promise; beforeMove?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; destination: Resource; exists: boolean; overwrite: string | undefined; }) => Promise; afterMove?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; destination: Resource; exists: boolean; overwrite: string | undefined; }) => Promise; beginOptions?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preOptions?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; complianceClasses: string[]; allowedMethods: string[]; cacheControl: string; }) => Promise; beforeOptions?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; complianceClasses: string[]; allowedMethods: string[]; cacheControl: string; }) => Promise; afterOptions?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; complianceClasses: string[]; allowedMethods: string[]; cacheControl: string; }) => Promise; beginPropfind?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; prePropfind?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; depth: string; }) => Promise; beforePropfind?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; depth: string; }) => Promise; afterPropfind?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; depth: string; }) => Promise; beginProppatch?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preProppatch?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; depth: string; }) => Promise; beforeProppatch?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; depth: string; }) => Promise; afterProppatch?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; depth: string; }) => Promise; beginPut?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; prePut?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; newResource: boolean; }) => Promise; beforePut?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; newResource: boolean; }) => Promise; afterPut?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; newResource: boolean; }) => Promise; beginUnlock?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preUnlock?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; lockTokenHeader: string | undefined; }) => Promise; beforeUnlock?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; token: string; lock: Lock | undefined; }) => Promise; afterUnlock?: (request: Request, response: AuthResponse, data: { method: Method; resource: Resource; token: string; lock: Lock | undefined; }) => Promise; beginMethod?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; preMethod?: (request: Request, response: AuthResponse, data: { method: string; url: URL; }) => Promise; beforeMethod?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; afterMethod?: (request: Request, response: AuthResponse, data: { method: Method; url: URL; }) => Promise; }