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;