/**
 * Webhook Type Definition
 * Webhook event definition of the LINE Messaging API
 *
 * The version of the OpenAPI document: 1.0.0
 *
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { DeliveryContext } from "./deliveryContext.js";
import { EventMode } from "./eventMode.js";
import { Source } from "./source.js";

import { AccountLinkEvent } from "./models.js";
import { ActivatedEvent } from "./models.js";
import { BeaconEvent } from "./models.js";
import { BotResumedEvent } from "./models.js";
import { BotSuspendedEvent } from "./models.js";
import { DeactivatedEvent } from "./models.js";
import { PnpDeliveryCompletionEvent } from "./models.js";
import { FollowEvent } from "./models.js";
import { JoinEvent } from "./models.js";
import { LeaveEvent } from "./models.js";
import { MemberJoinedEvent } from "./models.js";
import { MemberLeftEvent } from "./models.js";
import { MembershipEvent } from "./models.js";
import { MessageEvent } from "./models.js";
import { ModuleEvent } from "./models.js";
import { PostbackEvent } from "./models.js";
import { UnfollowEvent } from "./models.js";
import { UnsendEvent } from "./models.js";
import { VideoPlayCompleteEvent } from "./models.js";

export type Event =
  | AccountLinkEvent // accountLink
  | ActivatedEvent // activated
  | BeaconEvent // beacon
  | BotResumedEvent // botResumed
  | BotSuspendedEvent // botSuspended
  | DeactivatedEvent // deactivated
  | PnpDeliveryCompletionEvent // delivery
  | FollowEvent // follow
  | JoinEvent // join
  | LeaveEvent // leave
  | MemberJoinedEvent // memberJoined
  | MemberLeftEvent // memberLeft
  | MembershipEvent // membership
  | MessageEvent // message
  | ModuleEvent // module
  | PostbackEvent // postback
  | UnfollowEvent // unfollow
  | UnsendEvent // unsend
  | VideoPlayCompleteEvent; // videoPlayComplete

/**
 * Webhook event
 */
export type EventBase = {
  /**
   * Type of the event
   */
  type: string /**/;
  /**
   */
  source?: Source /**/;
  /**
   * Time of the event in milliseconds.
   */
  timestamp: number /**/;
  /**
   */
  mode: EventMode /**/;
  /**
   * Webhook Event ID. An ID that uniquely identifies a webhook event. This is a string in ULID format.
   */
  webhookEventId: string /**/;
  /**
   */
  deliveryContext: DeliveryContext /**/;
};

export namespace Event {}
