@collaborne/custom-cloudformation-resources
Version:
Custom CloudFormation resources
49 lines (48 loc) • 3 kB
TypeScript
import type { ObjectSchema, SchemaType } from '@collaborne/json-schema-to-type';
import { CustomResourceRequest, ResponseStatus } from './cfn-response';
import { Logger } from './logger';
export interface Response<ResourceAttributes extends unknown> {
physicalResourceId?: string;
attributes?: ResourceAttributes;
}
/**
* Response returned by the resource methods to indicate that long-running continuation is needed
*/
export interface ContinuationRequired<ContinuationAttributes extends unknown> {
/** Number of seconds after which to retry the function */
continuationAfter: number;
/** Additional properties that should be provided in the continuation invocation */
continuationAttributes: ContinuationAttributes;
}
declare type ContinuedCustomResourceRequest<ContinuationAttributes> = CustomResourceRequest & {
ContinuationAttributes: ContinuationAttributes;
};
export declare abstract class CustomResource<ResourceAttributes extends unknown, S extends ObjectSchema, ContinuationAttributes extends unknown = unknown> {
protected readonly schema: S;
protected readonly logicalResourceId: string;
protected readonly logger: Logger;
private static CW_EVENTS_TARGET_ID;
private cwEvents;
private requestQueue;
private currentRequest?;
constructor(schema: S, logicalResourceId: string, logger: Logger);
abstract createResource(physicalResourceId: string, params: SchemaType<S>, continuationAttributes?: ContinuationAttributes): Promise<Response<ResourceAttributes> | ContinuationRequired<ContinuationAttributes>>;
abstract deleteResource(physicalResourceId: string, params: SchemaType<S>, continuationAttributes?: ContinuationAttributes): Promise<Response<ResourceAttributes> | ContinuationRequired<ContinuationAttributes>>;
abstract updateResource(physicalResourceId: string, params: SchemaType<S>, oldParams: unknown, continuationAttributes?: ContinuationAttributes): Promise<Response<ResourceAttributes> | ContinuationRequired<ContinuationAttributes>>;
handleRequest(request: CustomResourceRequest | ContinuedCustomResourceRequest<ContinuationAttributes>): Promise<ResponseStatus>;
/**
* Get the request that is currently being processed
*
* This is mostly intended for integrations that want to watch the state of their
* resources, the returned value should not be changed in any way.
*
* @returns the current request when called during an execution of {@link handleRequest}, otherwise `undefined`
*/
get request(): undefined | CustomResourceRequest | ContinuedCustomResourceRequest<ContinuationAttributes>;
protected handleRequestInner(request: CustomResourceRequest | ContinuedCustomResourceRequest<ContinuationAttributes>): Promise<ResponseStatus>;
protected processRequest(request: CustomResourceRequest | ContinuedCustomResourceRequest<ContinuationAttributes>): Promise<{
status: ResponseStatus;
}>;
private getContinuationRuleName;
}
export {};