@altostra/core
Version:
Core library for shared types and logic
149 lines (148 loc) • 5.22 kB
TypeScript
import type { NonEmptyString } from "../../common/CustomTypes/NonEmptyString";
import type { AwsResourceCommon, Environment, SnapStart, VpcConfig } from "../CloudFormation";
import type { CloudFormationString, CloudFormationValue } from "../CloudFormation/IntrinsicFunctions";
import type { ProvisionedConcurrencyConfiguration } from "../CloudFormation/Lambda/common";
import type { IamPolicyDocument } from "../CloudFormation/PolicyDocument";
import type { FilterPolicy } from "../CloudFormation/SNS/FilterPolicy";
import type { Arn } from "../CustomTypes/Arn";
import type { S3BucketName } from "../CustomTypes/S3BucketName";
import type { ServerlessTags } from "./common";
import type { SAMPolicyTemplate } from "./SAMPolicyTemplates";
export declare type FunctionType = 'AWS::Serverless::Function';
export interface Function extends AwsResourceCommon {
Type: FunctionType;
Properties: AwsSamServerlessFunctionProperties;
}
export declare type AwsSamServerlessFunctionProperties = AwsSamServerlessFunctionNoCodeProperties & CodeProvider;
interface ZipCodeProviderBase {
PackageType?: 'Zip';
Handler: string;
Runtime: string;
SnapStart?: SnapStart;
}
export interface S3CodeProvider extends ZipCodeProviderBase {
CodeUri: CodeUri;
}
export declare type CodeUri = CloudFormationString | FunctionCode;
export interface FunctionCode {
Bucket: CloudFormationValue<S3BucketName>;
Key: CloudFormationString<NonEmptyString>;
Version?: CloudFormationString;
}
export interface InlineCodeProvider extends ZipCodeProviderBase {
InlineCode: string;
}
interface ImageCodeProvider {
PackageType: 'Image';
ImageConfig?: ImageConfig;
ImageUri: string;
}
export interface ImageConfig {
Command?: string[];
EntryPoint?: string[];
WorkingDirectory?: string;
}
export declare type CodeProvider = ImageCodeProvider | InlineCodeProvider | S3CodeProvider;
export declare function isS3CodeProvider(codeProvider: CodeProvider): codeProvider is S3CodeProvider;
export declare function isInlineCodeProvider(codeProvider: CodeProvider): codeProvider is InlineCodeProvider;
export interface AwsSamServerlessFunctionNoCodeProperties {
Layers?: string[];
Description?: string;
FunctionName?: string;
MemorySize?: CloudFormationValue<number>;
Timeout?: CloudFormationValue<number>;
Role?: CloudFormationValue<Arn>;
Policies?: (CloudFormationValue | IamPolicyDocument | SAMPolicyTemplate)[];
VpcConfig?: VpcConfig;
Tags?: ServerlessTags;
Tracing?: Tracing;
KmsKeyArn?: CloudFormationValue<Arn>;
DeadLetterQueue?: {
Type: 'SNS' | 'SQS';
TargetArn: string;
};
DeploymentPreference?: object;
AutoPublishAlias?: string;
ReservedConcurrentExecutions?: CloudFormationValue<number>;
Environment?: Environment;
Events?: Record<string, FunctionEventSource>;
AssumeRolePolicyDocument?: object;
AutoPublishCodeSha256?: string;
CodeSigningConfigArn?: CloudFormationValue<Arn>;
EventInvokeConfig?: object;
FileSystemConfigs?: object[];
PermissionsBoundary?: CloudFormationValue<Arn>;
ProvisionedConcurrencyConfig?: ProvisionedConcurrencyConfiguration;
VersionDescription?: string;
}
export declare type FunctionEventSource = ApiEventSource | KinesisEventSource | QueueEventSource | S3EventSource | SnsEventSource | TableEventSource;
export interface ApiEventSource {
Type: 'Api';
Properties: {
Path: string;
Method: ApiHttpMethod;
RestApiId?: CloudFormationString;
Auth?: {
Authorizer: string;
};
};
}
export declare type StartingPosition = 'LATEST' | 'TRIM_HORIZON';
export interface KinesisEventSource {
Type: 'Kinesis';
Properties: {
Stream: CloudFormationString;
StartingPosition: StartingPosition;
BatchSize?: number;
MaximumBatchingWindowInSeconds?: number;
MaximumRecordAgeInSeconds?: number;
MaximumRetryAttempts?: number;
ParallelizationFactor?: number;
TumblingWindowInSeconds?: number;
};
}
export interface TableEventSource {
Type: 'DynamoDB';
Properties: {
Stream: CloudFormationString;
StartingPosition: StartingPosition;
BatchSize?: number;
};
}
export interface QueueEventSource {
Type: 'SQS';
Properties: {
Queue: CloudFormationString;
BatchSize?: number;
};
}
export declare type ApiHttpMethod = 'any' | 'delete' | 'get' | 'options' | 'post' | 'put';
export interface SnsEventSource {
Type: 'SNS';
Properties: {
Topic: CloudFormationValue<Arn>;
Region?: CloudFormationString;
SqsSubscription?: boolean;
FilterPolicy?: FilterPolicy;
};
}
export interface S3EventSource {
Type: 'S3';
Properties: {
Bucket: CloudFormationValue;
Events: string[] | string;
Filter?: NotificationFilter;
};
}
export interface NotificationFilter {
S3Key: {
Rules: FilterRule[];
};
}
export interface FilterRule {
Name: 'prefix' | 'suffix';
Value: string;
}
export declare type PackageType = 'Image' | 'Zip';
export declare type Tracing = 'Active' | 'PassThrough';
export {};