UNPKG

dbaas

Version:

Database as a service. Expose db to REST and GraphQL.

107 lines (106 loc) 4.61 kB
import type { Accountability, SchemaOverview, Query } from "@directus/shared/types"; import type { Knex } from "knex"; import type { UnionToIntersection } from "../../utils/types.js"; import type SystemModels from "../../models/SystemModels.js"; import Models from "../../models/index.js"; /** * Action Hook callback context */ export interface ActionHookContext { /** Current database transaction */ database: Knex; /** The current API schema in use */ schema: SchemaOverview; /** Information about the current user */ accountability: Accountability; } export type ActionHookHandlerBase<TName extends string = string, TMeta = unknown> = (name: TName, callback: (meta: TMeta, ctx: ActionHookContext) => Promise<void>) => void; export type ServerStartActionHookHandler = ActionHookHandlerBase<"server.start", { server: unknown; }>; export type ServerStopActionHookHandler = ActionHookHandlerBase<"server.stop", { server: unknown; }>; export type ResponseActionHookHandler = ActionHookHandlerBase<"response", { request: unknown; response: unknown; ip: unknown; duration: unknown; finished: unknown; }>; export type AuthLoginActionHookHandler = ActionHookHandlerBase<"auth.login", { payload: unknown; status: unknown; user: unknown; provider: unknown; }>; export type FilesUploadActionHookHandler = ActionHookHandlerBase<"files.upload", { payload: unknown; key: unknown; collection: string; }>; export type AllItemCollectionCrudActionHookHandlers = ActionHookHandlerBase<`items.read`, { payload: unknown[]; query: Query; collection: string; }> & ActionHookHandlerBase<`items.create`, { payload: unknown; key: string | number; collection: string; }> & ActionHookHandlerBase<`items.update`, { payload: unknown; keys: (string | number)[]; collection: string; }> & ActionHookHandlerBase<`items.delete`, { keys: (string | number)[]; collection: string; }> & ActionHookHandlerBase<`items.sort`, { collection: string; item: unknown; to: unknown; }>; export type ItemCollectionCrudActionHookHandler<TName extends string, TPayload> = ActionHookHandlerBase<`${TName}.items.read`, { payload: TPayload[]; query: Query; collection: string; }> & ActionHookHandlerBase<`${TName}.items.create`, { payload: TPayload; key: string | number; collection: string; }> & ActionHookHandlerBase<`${TName}.items.update`, { payload: TPayload; keys: (string | number)[]; collection: string; }> & ActionHookHandlerBase<`${TName}.items.delete`, { keys: (string | number)[]; collection: string; }> & ActionHookHandlerBase<`${TName}.items.sort`, { collection: string; item: unknown; to: unknown; }>; export type SystemCollectionCrudActionHookHandler<TName extends string, TPayload> = ActionHookHandlerBase<`${TName}.create`, { payload: TPayload; key: string | number; collection: string; }> & ActionHookHandlerBase<`${TName}.update`, { payload: TPayload; keys: (string | number)[]; collection: string; }> & ActionHookHandlerBase<`${TName}.delete`, { keys: (string | number)[]; collection: string; }>; type ItemCollectionActionHookHandlerModels<TModels> = { [key in Extract<keyof TModels, string>]: ItemCollectionCrudActionHookHandler<key, TModels[key]>; }; type AllItemCollectionActionHookHandlerModels<TModels> = ItemCollectionActionHookHandlerModels<TModels>[keyof ItemCollectionActionHookHandlerModels<TModels>]; export type ItemCollectionCrudActionHookHandlers<TModels> = UnionToIntersection<AllItemCollectionActionHookHandlerModels<TModels>>; export type ItemCollectionActionHookHandlers<TModels> = AllItemCollectionCrudActionHookHandlers & ItemCollectionCrudActionHookHandlers<TModels>; type SystemCollectionActionHookHandlerModels<TModels> = { [key in Extract<keyof TModels, string>]: SystemCollectionCrudActionHookHandler<key, TModels[key]>; }; type AllSystemCollectionActionHookHandlerModels<TModels> = SystemCollectionActionHookHandlerModels<TModels>[keyof SystemCollectionActionHookHandlerModels<TModels>]; export type SystemCollectionActionHookHandlers<TModels> = UnionToIntersection<AllSystemCollectionActionHookHandlerModels<TModels>>; type ActionHookHandler<TModels extends Models = Models> = ServerStartActionHookHandler & ServerStopActionHookHandler & ResponseActionHookHandler & AuthLoginActionHookHandler & FilesUploadActionHookHandler & ItemCollectionActionHookHandlers<TModels> & SystemCollectionActionHookHandlers<SystemModels> & ActionHookHandlerBase; export default ActionHookHandler;