UNPKG

@collaborne/custom-cloudformation-resources

Version:
49 lines (48 loc) 3 kB
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 {};