165 lines
5.5 KiB
TypeScript
165 lines
5.5 KiB
TypeScript
import type { Construct } from 'constructs';
|
|
import type { WebSocketRouteOptions } from './route';
|
|
import { WebSocketRoute } from './route';
|
|
import type { IGrantable } from '../../../aws-iam';
|
|
import { Grant } from '../../../aws-iam';
|
|
import type { ApiReference, IApiRef } from '../apigatewayv2.generated';
|
|
import type { IApi, IpAddressType } from '../common/api';
|
|
import { ApiBase } from '../common/base';
|
|
/**
|
|
* Represents a reference to an HTTP API
|
|
*/
|
|
export interface IWebSocketApiRef extends IApiRef {
|
|
/**
|
|
* Indicates that this is a WebSocket API
|
|
*
|
|
* Will always return true, but is necessary to prevent accidental structural
|
|
* equality in TypeScript.
|
|
*/
|
|
readonly isWebsocketApi: boolean;
|
|
}
|
|
/**
|
|
* Represents a WebSocket API
|
|
*/
|
|
export interface IWebSocketApi extends IApi, IWebSocketApiRef {
|
|
}
|
|
/**
|
|
* Represents the currently available API Key Selection Expressions
|
|
*/
|
|
export declare class WebSocketApiKeySelectionExpression {
|
|
readonly customApiKeySelector: string;
|
|
/**
|
|
* The API will extract the key value from the `x-api-key` header in the user request.
|
|
*/
|
|
static readonly HEADER_X_API_KEY: WebSocketApiKeySelectionExpression;
|
|
/**
|
|
* The API will extract the key value from the `usageIdentifierKey` attribute in the `context` map,
|
|
* returned by the Lambda Authorizer.
|
|
* See https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
|
|
*/
|
|
static readonly AUTHORIZER_USAGE_IDENTIFIER_KEY: WebSocketApiKeySelectionExpression;
|
|
/**
|
|
* @param customApiKeySelector The expression used by API Gateway
|
|
*/
|
|
constructor(customApiKeySelector: string);
|
|
}
|
|
/**
|
|
* Props for WebSocket API
|
|
*/
|
|
export interface WebSocketApiProps {
|
|
/**
|
|
* Name for the WebSocket API resource
|
|
* @default - id of the WebSocketApi construct.
|
|
*/
|
|
readonly apiName?: string;
|
|
/**
|
|
* An API key selection expression. Providing this option will require an API Key be provided to access the API.
|
|
* @default - Key is not required to access these APIs
|
|
*/
|
|
readonly apiKeySelectionExpression?: WebSocketApiKeySelectionExpression;
|
|
/**
|
|
* The description of the API.
|
|
* @default - none
|
|
*/
|
|
readonly description?: string;
|
|
/**
|
|
* The route selection expression for the API
|
|
* @default '$request.body.action'
|
|
*/
|
|
readonly routeSelectionExpression?: string;
|
|
/**
|
|
* Options to configure a '$connect' route
|
|
*
|
|
* @default - no '$connect' route configured
|
|
*/
|
|
readonly connectRouteOptions?: WebSocketRouteOptions;
|
|
/**
|
|
* Options to configure a '$disconnect' route
|
|
*
|
|
* @default - no '$disconnect' route configured
|
|
*/
|
|
readonly disconnectRouteOptions?: WebSocketRouteOptions;
|
|
/**
|
|
* Options to configure a '$default' route
|
|
*
|
|
* @default - no '$default' route configured
|
|
*/
|
|
readonly defaultRouteOptions?: WebSocketRouteOptions;
|
|
/**
|
|
* The IP address types that can invoke the API.
|
|
*
|
|
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-ip-address-type.html
|
|
*
|
|
* @default undefined - AWS default is IPV4
|
|
*/
|
|
readonly ipAddressType?: IpAddressType;
|
|
/**
|
|
* Avoid validating models when creating a deployment.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly disableSchemaValidation?: boolean;
|
|
}
|
|
/**
|
|
* Attributes for importing a WebSocketApi into the CDK
|
|
*/
|
|
export interface WebSocketApiAttributes {
|
|
/**
|
|
* The identifier of the WebSocketApi
|
|
*/
|
|
readonly webSocketId: string;
|
|
/**
|
|
* The endpoint URL of the WebSocketApi
|
|
* @default - throw san error if apiEndpoint is accessed.
|
|
*/
|
|
readonly apiEndpoint?: string;
|
|
}
|
|
/**
|
|
* Create a new API Gateway WebSocket API endpoint.
|
|
* @resource AWS::ApiGatewayV2::Api
|
|
*/
|
|
export declare class WebSocketApi extends ApiBase implements IWebSocketApi {
|
|
/** Uniquely identifies this class. */
|
|
static readonly PROPERTY_INJECTION_ID: string;
|
|
/**
|
|
* Import an existing WebSocket API into this CDK app.
|
|
*/
|
|
static fromWebSocketApiAttributes(scope: Construct, id: string, attrs: WebSocketApiAttributes): IWebSocketApi;
|
|
readonly isWebsocketApi = true;
|
|
readonly apiId: string;
|
|
readonly apiEndpoint: string;
|
|
/**
|
|
* A human friendly name for this WebSocket API. Note that this is different from `webSocketApiId`.
|
|
*/
|
|
readonly webSocketApiName?: string;
|
|
constructor(scope: Construct, id: string, props?: WebSocketApiProps);
|
|
/**
|
|
* Add a new route
|
|
*/
|
|
addRoute(routeKey: string, options: WebSocketRouteOptions): WebSocketRoute;
|
|
/**
|
|
* Grant access to the API Gateway management API for this WebSocket API to an IAM
|
|
* principal (Role/Group/User).
|
|
* [disable-awslint:no-grants]
|
|
*
|
|
* @param identity The principal
|
|
*/
|
|
grantManageConnections(identity: IGrantable): Grant;
|
|
/**
|
|
* Get the "execute-api" ARN.
|
|
*
|
|
* @deprecated Use `arnForExecuteApiV2()` instead.
|
|
*/
|
|
arnForExecuteApi(method?: string, path?: string, stage?: string): string;
|
|
/**
|
|
* Get the "execute-api" ARN.
|
|
*
|
|
* @default - The default behavior applies when no specific route, or stage is provided.
|
|
* In this case, the ARN will cover all routes, and all stages of this API.
|
|
* Specifically, if 'route' is not specified, it defaults to '*', representing all routes.
|
|
* If 'stage' is not specified, it also defaults to '*', representing all stages.
|
|
*/
|
|
arnForExecuteApiV2(route?: string, stage?: string): string;
|
|
get apiRef(): ApiReference;
|
|
}
|