/** * The interface that AWS Lambda will invoke your handler with. * There are more specialized types for many cases where AWS services * invoke your lambda, but you can directly use this type for when you are invoking * your lambda directly. * * See tme {@link http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html AWS documentation} * for more information about the runtime behavior, and the * {@link https://aws.amazon.com/blogs/compute/node-js-8-10-runtime-now-available-in-aws-lambda/ AWS Blog post} * introducing the async handler behavior in the 8.10 runtime. * * @example Defining a custom handler type * import { Handler } from 'aws-lambda' * * interface NameEvent { * fullName: string * } * interface NameResult { * firstName: string * middleNames: string * lastName: string * } * type PersonHandler = Handler * * export const handler: PersonHandler = async (event) => { * const names = event.fullName.split(' ') * const firstName = names.shift() * const lastName = names.pop() * return { firstName, middleNames: names, lastName } * } * * @example Logs the contents of the event object and returns the location of the logs * import { Handler } from 'aws-lambda' * * export const handler: Handler = async (event, context) => { * console.log("EVENT: \n" + JSON.stringify(event, null, 2)) * return context.logStreamName * } * * @example AWS SDK with Async Function and Promises * import { Handler } from 'aws-lambda' * import AWS from 'aws-sdk' * * const s3 = new AWS.S3() * * export const handler: Handler = async (event) => { * const response = await s3.listBuckets().promise() * return response?.Buckets.map((bucket) => bucket.Name) * } * * @example HTTP Request with Callback * import { Handler } from 'aws-lambda' * import https from 'https' * * let url = "https://docs.aws.amazon.com/lambda/latest/dg/welcome.html" * * export const handler: Handler = (event, context, callback) => { * https.get(url, (res) => { * callback(null, res.statusCode) * }).on('error', (e) => { * callback(Error(e)) * }) * } * * @param event * Parsed JSON data in the lambda request payload. For an AWS service triggered * lambda this should be in the format of a type ending in Event, for example the * S3Handler receives an event of type S3Event. * @param context * Runtime contextual information of the current invocation, for example the caller * identity, available memory and time remaining, legacy completion callbacks, and * a mutable property controlling when the lambda execution completes. * @param callback * NodeJS-style completion callback that the AWS Lambda runtime will provide that can * be used to provide the lambda result payload value, or any execution error. Can * instead return a promise that resolves with the result payload value or rejects * with the execution error. * @return * A promise that resolves with the lambda result payload value, or rejects with the * execution error. Note that if you implement your handler as an async function, * you will automatically return a promise that will resolve with a returned value, * or reject with a thrown value. */ export type Handler = ( event: TEvent, context: Context, callback: Callback, ) => void | Promise; /** * {@link Handler} context parameter. * See {@link https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html AWS documentation}. */ export interface Context { callbackWaitsForEmptyEventLoop: boolean; functionName: string; functionVersion: string; invokedFunctionArn: string; memoryLimitInMB: string; awsRequestId: string; logGroupName: string; logStreamName: string; identity?: CognitoIdentity | undefined; clientContext?: ClientContext | undefined; getRemainingTimeInMillis(): number; // Functions for compatibility with earlier Node.js Runtime v0.10.42 // No longer documented, so they are deprecated, but they still work // as of the 12.x runtime, so they are not removed from the types. /** @deprecated Use handler callback or promise result */ done(error?: Error, result?: any): void; /** @deprecated Use handler callback with first argument or reject a promise result */ fail(error: Error | string): void; /** @deprecated Use handler callback with second argument or resolve a promise result */ succeed(messageOrObject: any): void; // Unclear what behavior this is supposed to have, I couldn't find any still extant reference, // and it behaves like the above, ignoring the object parameter. /** @deprecated Use handler callback or promise result */ succeed(message: string, object: any): void; } export interface CognitoIdentity { cognitoIdentityId: string; cognitoIdentityPoolId: string; } export interface ClientContext { client: ClientContextClient; Custom?: any; env: ClientContextEnv; } export interface ClientContextClient { installationId: string; appTitle: string; appVersionName: string; appVersionCode: string; appPackageName: string; } export interface ClientContextEnv { platformVersion: string; platform: string; make: string; model: string; locale: string; } /** * NodeJS-style callback parameter for the {@link Handler} type. * Can be used instead of returning a promise, see the * {@link https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html AWS documentation} * for the handler programming model. * * @param error * Parameter to use to provide the error payload for a failed lambda execution. * See {@link https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-mode-exceptions.html AWS documentation} * for error handling. * If an Error instance is passed, the error payload uses the `name` property as the `errorType`, * the `message` property as the `errorMessage`, and parses the `stack` property string into * the `trace` array. * For other values, the `errorType` is `typeof value`, the `errorMessage` is `String(value)`, and * `trace` is an empty array. * * @param result * Parameter to use to provide the result payload for a successful lambda execution. * Pass `null` or `undefined` for the `error` parameter to use this parameter. */ export type Callback = (error?: Error | string | null, result?: TResult) => void;