import { Request } from 'express'; import EnvoyPluginSDK from './EnvoyPluginSDK'; import EnvoyMeta, { EnvoyEventMeta, EnvoyRouteMeta } from './EnvoyMeta'; import EntryPayload from '../payloads/EntryPayload'; import InvitePayload from '../payloads/InvitePayload'; import LocationPayload from '../payloads/LocationPayload'; import NotificationPayload from '../payloads/NotificationPayload'; import TakeoverPayload from '../payloads/TakeoverPayload'; import EnvoyEntryEvent from '../internal/EnvoyEntryEvent'; import EnvoyInviteEvent from '../internal/EnvoyInviteEvent'; import EnvoyLocationEvent from '../internal/EnvoyLocationEvent'; import EnvoyOptionsRouteResponseBody from '../internal/EnvoyOptionsRouteResponseBody'; import EnvoyOptionsRouteParams from '../internal/EnvoyOptionsRouteParams'; import EnvoySelectedValuesRouteResponseBody from '../internal/EnvoySelectedValuesRouteResponseBody'; import EnvoySelectedValuesRouteParams from '../internal/EnvoySelectedValuesRouteParams'; import EnvoyRemoteValueRouteResponseBody from '../internal/EnvoyRemoteValueRouteResponseBody'; /** * @internal */ export const VERIFIED = Symbol('verified'); /** * @internal */ export interface VerifiedRequest extends Request { [VERIFIED]: boolean; } /** * Base type for Envoy requests. * You probably won't need to use this type directly. * For routes, use {@link EnvoyRouteRequest}, * and for events, use {@link EnvoyEntryEventRequest} or {@link EnvoyInviteEventRequest}. * * @category Base */ export interface EnvoyBaseRequest extends VerifiedRequest { envoy: EnvoyPluginSDK; } /** * Use to type your `req` object in Envoy route handlers such as validation URLs. * * @category Request */ export type EnvoyRouteRequest< Payload = unknown, Config = Record, Params = Record, > = EnvoyBaseRequest, Payload>; /** * Use to type your `req` object in Envoy "migration" route handlers. * * @category Request */ export type EnvoyMigrationRouteRequest> = EnvoyRouteRequest< never, OldConfig, never >; /** * Use to type your `req` object in Envoy "options URL" route handlers. * * @category Request */ export type EnvoyOptionsRouteRequest> = EnvoyRouteRequest< EnvoyOptionsRouteResponseBody, Config, EnvoyOptionsRouteParams >; /** * Use to type your `req` object in Envoy "selected values URL" route handlers. * * @category Request */ export type EnvoySelectedValuesRouteRequest> = EnvoyRouteRequest< EnvoySelectedValuesRouteResponseBody, Config, EnvoySelectedValuesRouteParams >; /** * Use to type your `req` object in Envoy "remote value URL" route handlers. * * @category Request */ export type EnvoyRemoteValueRouteRequest> = EnvoyRouteRequest< EnvoyRemoteValueRouteResponseBody, Config, never >; /** * Use to type your `req` object in Envoy "validation URL" route handlers. * * @category Request */ export type EnvoyValidationRouteRequest< Payload = Record, Config = Record, > = EnvoyRouteRequest; /** * Base type for event requests. * You should prefer specific types such as {@link EnvoyEntryEventRequest} or {@link EnvoyInviteEventRequest}. * * @category Request */ export type EnvoyEventRequest< Event extends string = string, Payload = unknown, Config = Record, > = EnvoyBaseRequest, Payload>; /** * Use to type your `req` object in entry event handlers, * such as handlers for `entry_sign_in`. * * @category Request */ export type EnvoyEntryEventRequest> = EnvoyEventRequest< EnvoyEntryEvent, EntryPayload, Config >; /** * Use to type your `req` object in invite event handlers, * such as handlers for `invite_created` or `upcoming_visit`. * * @category Request */ export type EnvoyInviteEventRequest> = EnvoyEventRequest< EnvoyInviteEvent, InvitePayload, Config >; /** * Use to type your `req` object in location event handlers, * such as handlers for `location_capacity_updated`. * * @category Request */ export type EnvoyLocationEventRequest> = EnvoyEventRequest< EnvoyLocationEvent, LocationPayload, Config >; /** * Use to type your `req` object in your notification event handler. * * @category Request */ export type EnvoyNotificationEventRequest> = EnvoyEventRequest< string, NotificationPayload, Config >; /** * Use to type your `req` object in your takeover event handler. * * @category Request */ export type EnvoyTakeoverEventRequest> = EnvoyEventRequest< string, TakeoverPayload, Config >; /** * You probably won't need to use this type directly. * For routes, use {@link EnvoyRouteRequest}, * and for events, use {@link EnvoyEntryEventRequest} or {@link EnvoyInviteEventRequest}. * * @category Base */ type EnvoyRequest> = EnvoyBaseRequest< EnvoyRouteMeta | EnvoyEventMeta, Payload >; export default EnvoyRequest;