/// <reference types="mongoose/types/aggregate" />
/// <reference types="mongoose/types/callback" />
/// <reference types="mongoose/types/collection" />
/// <reference types="mongoose/types/connection" />
/// <reference types="mongoose/types/cursor" />
/// <reference types="mongoose/types/document" />
/// <reference types="mongoose/types/error" />
/// <reference types="mongoose/types/expressions" />
/// <reference types="mongoose/types/helpers" />
/// <reference types="mongoose/types/middlewares" />
/// <reference types="mongoose/types/indexes" />
/// <reference types="mongoose/types/models" />
/// <reference types="mongoose/types/mongooseoptions" />
/// <reference types="mongoose/types/pipelinestage" />
/// <reference types="mongoose/types/populate" />
/// <reference types="mongoose/types/query" />
/// <reference types="mongoose/types/schemaoptions" />
/// <reference types="mongoose/types/schematypes" />
/// <reference types="mongoose/types/session" />
/// <reference types="mongoose/types/types" />
/// <reference types="mongoose/types/utility" />
/// <reference types="mongoose/types/validation" />
/// <reference types="mongoose/types/virtuals" />
/// <reference types="mongoose/types/inferschematype" />
import type { ObjectId } from "mongoose";
import { Schema } from "mongoose";
import type { HiddenBodyKeys } from "../interfaces";
import type { AppStatus, BackupStatus, BuildStatus, DeployStatus, SystemEvent, WebhookChannel } from "../interfaces/SystemTypes";
import type { IBase } from "./Base";
import type { IUser } from "./User";
import type { IDataReferences, IWebhook } from "./Webhook";
export /**
 * An interface that extends IBase and describes the properties of an notification.
 *
 * @interface INotification
 * @extends {IBase}
 */ interface INotification extends IBase {
    /**
     * The name of the notification.
     *
     * @type {string}
     * @memberof INotification
     */
    name?: string;
    /**
     * A message associated with the notification.
     *
     * @type {string}
     * @memberof INotification
     */
    message?: string;
    /**
     * A user ID who sent the notification.
     *
     * @type {string}
     * @memberof INotification
     */
    from?: string | ObjectId | IUser;
    /**
     * A webhook associated with the notification.
     *
     * @type {string}
     * @memberof INotification
     */
    webhook?: string | ObjectId | IWebhook;
    /**
     * The system event that triggered the notification
     */
    events?: SystemEvent[];
    /**
     * The status of the event (e.g., start, in_progress, failed, success, cancelled, deploying, sleep, awake, down, up)
     */
    status?: BuildStatus & DeployStatus & BackupStatus & AppStatus;
    /**
     * A list of {IWebhook} channels.
     */
    channels?: WebhookChannel[];
    /**
     * Callback URL of a notification
     */
    url?: string;
    /**
     * The date the user read or mark a notitication as read
     */
    readAt?: Date;
    /**
     * Referenced data of a notification
     */
    references?: IDataReferences;
}
export type NotificationDto = Omit<INotification, keyof HiddenBodyKeys>;
export declare const notificationSchema: Schema<INotification, import("mongoose").Model<INotification, any, any, any, import("mongoose").Document<unknown, any, INotification> & INotification & Required<{
    _id: string | import("mongoose").Types.ObjectId;
}>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, INotification, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<INotification>> & import("mongoose").FlatRecord<INotification> & Required<{
    _id: string | import("mongoose").Types.ObjectId;
}>>;
export declare const NotificationModel: import("mongoose").Model<INotification, {}, {}, {}, import("mongoose").Document<unknown, {}, INotification> & INotification & Required<{
    _id: string | import("mongoose").Types.ObjectId;
}>, any>;
//# sourceMappingURL=Notification.d.ts.map