diff --git a/packages/lambda-powertools-middleware-correlation-ids/README.md b/packages/lambda-powertools-middleware-correlation-ids/README.md index ddc75daa..35564e84 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/README.md +++ b/packages/lambda-powertools-middleware-correlation-ids/README.md @@ -36,20 +36,22 @@ Accepts a configuration object of the following shape: ```js { - sampleDebugLogRate: double [between 0 and 1] + sampleDebugLogRate: double [between 0 and 1], + constructLoggerFn: (correlationIds) => Logger [optional] } ``` ```js const middy = require('middy') const correlationIds = require('@dazn/lambda-powertools-middleware-correlation-ids') +const Log = require('@dazn/lambda-powertools-middleware-correlation-ids') const handler = async (event, context) => { return 42 } module.exports = middy(handler) - .use(correlationIds({ sampleDebugLogRate: 0.01 })) + .use(correlationIds({ sampleDebugLogRate: 0.01, constructLoggerFn: (correlationIds) => new Log({ correlationIds }) })) } ``` diff --git a/packages/lambda-powertools-middleware-correlation-ids/__tests__/dynamodb.js b/packages/lambda-powertools-middleware-correlation-ids/__tests__/dynamodb.js index 0b2bc0ca..bff7e9d7 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/__tests__/dynamodb.js +++ b/packages/lambda-powertools-middleware-correlation-ids/__tests__/dynamodb.js @@ -7,7 +7,7 @@ const captureCorrelationIds = require('../index') global.console.log = jest.fn() -const invokeDynamoHandler = (event, awsRequestId, sampleDebugLogRate, handlerF, recordF, done) => { +const invokeDynamoHandler = (event, awsRequestId, captureArg, handlerF, recordF, done) => { const handler = middy((event, context, cb) => { // check the correlation IDs outside the context of a record are correct handlerF(CorrelationIds.get()) @@ -21,7 +21,7 @@ const invokeDynamoHandler = (event, awsRequestId, sampleDebugLogRate, handlerF, cb(null) }) - handler.use(captureCorrelationIds({ sampleDebugLogRate })) + handler.use(captureCorrelationIds(captureArg)) handler(event, { awsRequestId }, (err, result) => { if (err) { @@ -61,7 +61,7 @@ const dynamoTests = () => { describe('when sampleDebugLogRate = 0', () => { it('always sets debug-log-enabled to false', () => { const requestId = uuid() - invokeDynamoHandler(genDynamoEvent(), requestId, 0, + invokeDynamoHandler(genDynamoEvent(), requestId, { sampleDebugLogRate: 0 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('false') @@ -77,7 +77,7 @@ const dynamoTests = () => { describe('when event lacks NewImage', () => { it('should set default correlation id', () => { const requestId = uuid() - invokeDynamoHandler(genDynamoEventWithoutNewImage(), requestId, 0, + invokeDynamoHandler(genDynamoEventWithoutNewImage(), requestId, { sampleDebugLogRate: 0 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('false') @@ -94,7 +94,7 @@ const dynamoTests = () => { describe('when sampleDebugLogRate = 1', () => { it('always sets debug-log-enabled to true', () => { const requestId = uuid() - invokeDynamoHandler(genDynamoEvent(), requestId, 1, + invokeDynamoHandler(genDynamoEvent(), requestId, { sampleDebugLogRate: 1 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('true') @@ -110,7 +110,7 @@ const dynamoTests = () => { describe('when correlation ID is not provided in the event', () => { it('sets it to the AWS Request ID', () => { const requestId = uuid() - invokeDynamoHandler(genDynamoEvent(), requestId, 0, + invokeDynamoHandler(genDynamoEvent(), requestId, { sampleDebugLogRate: 0 }, x => { // correlation IDs at the handler level expect(x['x-correlation-id']).toBe(requestId) @@ -128,7 +128,7 @@ const dynamoTests = () => { describe('when call-chain-length is not provided in the event', () => { it('sets it to 1', () => { const requestId = uuid() - invokeDynamoHandler(genDynamoEvent(), requestId, 0, + invokeDynamoHandler(genDynamoEvent(), requestId, { sampleDebugLogRate: 0 }, x => {}, // n/a record => { const x = record.correlationIds.get() @@ -157,7 +157,7 @@ const dynamoTests = () => { const event = genDynamoEvent(correlationIds) requestId = uuid() - invokeDynamoHandler(event, requestId, 0, x => { + invokeDynamoHandler(event, requestId, { sampleDebugLogRate: 0 }, x => { handlerCorrelationIds = x }, aRecord => { record = aRecord @@ -204,7 +204,7 @@ const dynamoTests = () => { } const event = genDynamoEvent(correlationIds) - invokeDynamoHandler(event, uuid(), 0, + invokeDynamoHandler(event, uuid(), { sampleDebugLogRate: 0 }, () => {}, aRecord => { record = aRecord }, done) @@ -215,6 +215,36 @@ const dynamoTests = () => { expect(x['call-chain-length']).toBe(2) }) }) + + describe('when constructLoggerFn provided in the args', () => { + let record + let id + let logger + let constructLoggerFn + + beforeEach((done) => { + id = uuid() + logger = { name: 'newLogger' } + constructLoggerFn = jest.fn(id => logger) + const correlationIds = { + 'x-correlation-id': id, + 'call-chain-length': 1 + } + + const event = genDynamoEvent(correlationIds) + invokeDynamoHandler(event, uuid(), { sampleDebugLogRate: 0, constructLoggerFn }, + () => {}, + aRecord => { record = aRecord }, + done) + }) + + it('sets logger as a non-enumerable property', () => { + expect(record).toHaveProperty('logger') + expect(record.propertyIsEnumerable('logger')).toBe(false) + expect(record.logger).toBe(logger) + expect(constructLoggerFn.mock.calls.length).toBe(1) + }) + }) } describe('Correlation IDs middleware (Dynamo)', () => { diff --git a/packages/lambda-powertools-middleware-correlation-ids/__tests__/firehose.js b/packages/lambda-powertools-middleware-correlation-ids/__tests__/firehose.js index dd9fd6b3..ce3ca329 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/__tests__/firehose.js +++ b/packages/lambda-powertools-middleware-correlation-ids/__tests__/firehose.js @@ -6,7 +6,7 @@ const captureCorrelationIds = require('../index') global.console.log = jest.fn() -const invokeFirehoseHandler = (event, awsRequestId, sampleDebugLogRate, handlerF, recordF, done) => { +const invokeFirehoseHandler = (event, awsRequestId, captureArg, handlerF, recordF, done) => { const handler = middy((event, context, cb) => { // check the correlation IDs outside the context of a record are correct handlerF(CorrelationIds.get()) @@ -20,7 +20,7 @@ const invokeFirehoseHandler = (event, awsRequestId, sampleDebugLogRate, handlerF cb(null) }) - handler.use(captureCorrelationIds({ sampleDebugLogRate })) + handler.use(captureCorrelationIds(captureArg)) handler(event, { awsRequestId }, (err, result) => { if (err) { @@ -54,7 +54,7 @@ const firehoseTests = () => { describe('when sampleDebugLogRate = 0', () => { it('always sets debug-log-enabled to false', () => { const requestId = uuid() - invokeFirehoseHandler(genFirehoseEvent(), requestId, 0, + invokeFirehoseHandler(genFirehoseEvent(), requestId, { sampleDebugLogRate: 0 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('false') @@ -70,7 +70,7 @@ const firehoseTests = () => { describe('when event lacks JSON payload', () => { it('should ignore the event', () => { const requestId = uuid() - invokeFirehoseHandler(genFirehoseEventWithoutJSON(), requestId, 0, + invokeFirehoseHandler(genFirehoseEventWithoutJSON(), requestId, { sampleDebugLogRate: 0 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('false') @@ -101,7 +101,7 @@ const firehoseTests = () => { describe('when correlation ID is not provided in the event', () => { it('sets it to the AWS Request ID', () => { const requestId = uuid() - invokeFirehoseHandler(genFirehoseEvent(), requestId, 0, + invokeFirehoseHandler(genFirehoseEvent(), requestId, { sampleDebugLogRate: 0 }, x => { // correlation IDs at the handler level expect(x['x-correlation-id']).toBe(requestId) @@ -119,7 +119,7 @@ const firehoseTests = () => { describe('when call-chain-length is not provided in the event', () => { it('sets it to 1', () => { const requestId = uuid() - invokeFirehoseHandler(genFirehoseEvent(), requestId, 0, + invokeFirehoseHandler(genFirehoseEvent(), requestId, { sampleDebugLogRate: 0 }, x => {}, // n/a record => { const x = record.correlationIds.get() @@ -148,7 +148,7 @@ const firehoseTests = () => { const event = genFirehoseEvent(correlationIds) requestId = uuid() - invokeFirehoseHandler(event, requestId, 0, x => { + invokeFirehoseHandler(event, requestId, { sampleDebugLogRate: 0 }, x => { handlerCorrelationIds = x }, aRecord => { record = aRecord @@ -195,7 +195,7 @@ const firehoseTests = () => { } const event = genFirehoseEvent(correlationIds) - invokeFirehoseHandler(event, uuid(), 0, + invokeFirehoseHandler(event, uuid(), { sampleDebugLogRate: 0 }, () => {}, aRecord => { record = aRecord }, done) @@ -206,6 +206,36 @@ const firehoseTests = () => { expect(x['call-chain-length']).toBe(2) }) }) + + describe('when constructLoggerFn provided in the args', () => { + let record + let id + let logger + let constructLoggerFn + + beforeEach((done) => { + id = uuid() + logger = { name: 'newLogger' } + constructLoggerFn = jest.fn(id => logger) + const correlationIds = { + 'x-correlation-id': id, + 'call-chain-length': 1 + } + + const event = genFirehoseEvent(correlationIds) + invokeFirehoseHandler(event, uuid(), { sampleDebugLogRate: 0, constructLoggerFn }, + () => {}, + aRecord => { record = aRecord }, + done) + }) + + it('sets logger as a non-enumerable property', () => { + expect(record).toHaveProperty('logger') + expect(record.propertyIsEnumerable('logger')).toBe(false) + expect(record.logger).toBe(logger) + expect(constructLoggerFn.mock.calls.length).toBe(1) + }) + }) } describe('Correlation IDs middleware (Firehose)', () => { diff --git a/packages/lambda-powertools-middleware-correlation-ids/__tests__/kinesis.js b/packages/lambda-powertools-middleware-correlation-ids/__tests__/kinesis.js index 80b1b2bb..90b1f3a1 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/__tests__/kinesis.js +++ b/packages/lambda-powertools-middleware-correlation-ids/__tests__/kinesis.js @@ -6,7 +6,7 @@ const captureCorrelationIds = require('../index') global.console.log = jest.fn() -const invokeKinesisHandler = (event, awsRequestId, sampleDebugLogRate, handlerF, recordF, done) => { +const invokeKinesisHandler = (event, awsRequestId, captureArg, handlerF, recordF, done) => { const handler = middy((event, context, cb) => { // check the correlation IDs outside the context of a record are correct handlerF(CorrelationIds.get()) @@ -20,7 +20,7 @@ const invokeKinesisHandler = (event, awsRequestId, sampleDebugLogRate, handlerF, cb(null) }) - handler.use(captureCorrelationIds({ sampleDebugLogRate })) + handler.use(captureCorrelationIds(captureArg)) handler(event, { awsRequestId }, (err, result) => { if (err) { @@ -54,7 +54,7 @@ const kinesisTests = () => { describe('when sampleDebugLogRate = 0', () => { it('always sets debug-log-enabled to false', () => { const requestId = uuid() - invokeKinesisHandler(genKinesisEvent(), requestId, 0, + invokeKinesisHandler(genKinesisEvent(), requestId, { sampleDebugLogRate: 0 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('false') @@ -70,7 +70,7 @@ const kinesisTests = () => { describe('when event lacks JSON payload', () => { it('should ignore the event', () => { const requestId = uuid() - invokeKinesisHandler(genKinesisEventWithoutJSON(), requestId, 0, + invokeKinesisHandler(genKinesisEventWithoutJSON(), requestId, { sampleDebugLogRate: 0 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('false') @@ -85,7 +85,7 @@ const kinesisTests = () => { describe('when sampleDebugLogRate = 1', () => { it('always sets debug-log-enabled to true', () => { const requestId = uuid() - invokeKinesisHandler(genKinesisEvent(), requestId, 1, + invokeKinesisHandler(genKinesisEvent(), requestId, { sampleDebugLogRate: 1 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('true') @@ -101,7 +101,7 @@ const kinesisTests = () => { describe('when correlation ID is not provided in the event', () => { it('sets it to the AWS Request ID', () => { const requestId = uuid() - invokeKinesisHandler(genKinesisEvent(), requestId, 0, + invokeKinesisHandler(genKinesisEvent(), requestId, { sampleDebugLogRate: 0 }, x => { // correlation IDs at the handler level expect(x['x-correlation-id']).toBe(requestId) @@ -119,7 +119,7 @@ const kinesisTests = () => { describe('when call-chain-length is not provided in the event', () => { it('sets it to 1', () => { const requestId = uuid() - invokeKinesisHandler(genKinesisEvent(), requestId, 0, + invokeKinesisHandler(genKinesisEvent(), requestId, { sampleDebugLogRate: 0 }, x => {}, // n/a record => { const x = record.correlationIds.get() @@ -148,7 +148,7 @@ const kinesisTests = () => { const event = genKinesisEvent(correlationIds) requestId = uuid() - invokeKinesisHandler(event, requestId, 0, x => { + invokeKinesisHandler(event, requestId, { sampleDebugLogRate: 0 }, x => { handlerCorrelationIds = x }, aRecord => { record = aRecord @@ -195,7 +195,7 @@ const kinesisTests = () => { } const event = genKinesisEvent(correlationIds) - invokeKinesisHandler(event, uuid(), 0, + invokeKinesisHandler(event, uuid(), { sampleDebugLogRate: 0 }, () => {}, aRecord => { record = aRecord }, done) @@ -206,6 +206,36 @@ const kinesisTests = () => { expect(x['call-chain-length']).toBe(2) }) }) + + describe('when constructLoggerFn provided in the args', () => { + let record + let id + let logger + let constructLoggerFn + + beforeEach((done) => { + id = uuid() + logger = { name: 'newLogger' } + constructLoggerFn = jest.fn(id => logger) + const correlationIds = { + 'x-correlation-id': id, + 'call-chain-length': 1 + } + + const event = genKinesisEvent(correlationIds) + invokeKinesisHandler(event, uuid(), { sampleDebugLogRate: 0, constructLoggerFn }, + () => {}, + aRecord => { record = aRecord }, + done) + }) + + it('sets logger as a non-enumerable property', () => { + expect(record).toHaveProperty('logger') + expect(record.propertyIsEnumerable('logger')).toBe(false) + expect(record.logger).toBe(logger) + expect(constructLoggerFn.mock.calls.length).toBe(1) + }) + }) } describe('Correlation IDs middleware (Kinesis)', () => { diff --git a/packages/lambda-powertools-middleware-correlation-ids/__tests__/sqs.js b/packages/lambda-powertools-middleware-correlation-ids/__tests__/sqs.js index e165c9ae..8d7977c4 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/__tests__/sqs.js +++ b/packages/lambda-powertools-middleware-correlation-ids/__tests__/sqs.js @@ -39,7 +39,7 @@ const sqsTests = (wrappedSns = false) => { describe('when sampleDebugLogRate = 0', () => { it('always sets debug-log-enabled to false', () => { const requestId = uuid() - invokeSqsHandler(genSqsEvent(wrappedSns), requestId, 0, + invokeSqsHandler(genSqsEvent(wrappedSns), requestId, { sampleDebugLogRate: 0 }, x => { expect(x['awsRequestId']).toBe(requestId) expect(x['debug-log-enabled']).toBe('false') @@ -71,7 +71,7 @@ const sqsTests = (wrappedSns = false) => { describe('when correlation ID is not provided in the event', () => { it('sets it to the AWS Request ID', () => { const requestId = uuid() - invokeSqsHandler(genSqsEvent(wrappedSns), requestId, 0, + invokeSqsHandler(genSqsEvent(wrappedSns), requestId, { sampleDebugLogRate: 0 }, x => { // correlation IDs at the handler level expect(x['x-correlation-id']).toBe(requestId) @@ -89,7 +89,7 @@ const sqsTests = (wrappedSns = false) => { describe('when call-chain-length is not provided in the event', () => { it('sets it to 1', () => { const requestId = uuid() - invokeSqsHandler(genSqsEvent(wrappedSns), requestId, 0, + invokeSqsHandler(genSqsEvent(wrappedSns), requestId, { sampleDebugLogRate: 0 }, x => { // n/a }, record => { @@ -119,7 +119,7 @@ const sqsTests = (wrappedSns = false) => { const event = genSqsEvent(wrappedSns, correlationIds) requestId = uuid() - invokeSqsHandler(event, requestId, 0, x => { + invokeSqsHandler(event, requestId, { sampleDebugLogRate: 0 }, x => { handlerCorrelationIds = x }, aRecord => { record = aRecord @@ -166,7 +166,7 @@ const sqsTests = (wrappedSns = false) => { } const event = genSqsEvent(wrappedSns, correlationIds) - invokeSqsHandler(event, uuid(), 0, + invokeSqsHandler(event, uuid(), { sampleDebugLogRate: 0 }, () => {}, aRecord => { record = aRecord }, done) @@ -179,6 +179,36 @@ const sqsTests = (wrappedSns = false) => { expect(x['call-chain-length']).toBe(2) }) }) + + describe('when constructLoggerFn provided in the args', () => { + let record + let id + let logger + let constructLoggerFn + + beforeEach((done) => { + id = uuid() + logger = { name: 'newLogger' } + constructLoggerFn = jest.fn(id => logger) + const correlationIds = { + 'x-correlation-id': id, + 'call-chain-length': 1 + } + + const event = genSqsEvent(wrappedSns, correlationIds) + invokeSqsHandler(event, uuid(), { sampleDebugLogRate: 0, constructLoggerFn }, + () => {}, + aRecord => { record = aRecord }, + done) + }) + + it('sets logger as a non-enumerable property', () => { + expect(record).toHaveProperty('logger') + expect(record.propertyIsEnumerable('logger')).toBe(false) + expect(record.logger).toBe(logger) + expect(constructLoggerFn.mock.calls.length).toBe(1) + }) + }) } const sqsWrappedSnsTests = () => { @@ -200,7 +230,7 @@ const sqsWrappedSnsTests = () => { })) event.Records[0].body = JSON.stringify(body) - invokeSqsHandler(event, uuid(), 0, + invokeSqsHandler(event, uuid(), { sampleDebugLogRate: 0 }, () => ({}), record => { expect(record.messageAttributes).toEqual({}) @@ -209,7 +239,7 @@ const sqsWrappedSnsTests = () => { }) } -const invokeSqsHandler = (event, awsRequestId, sampleDebugLogRate, handlerF, recordF, done) => { +const invokeSqsHandler = (event, awsRequestId, captureArg, handlerF, recordF, done) => { const handler = middy((event, context, cb) => { // check the correlation IDs outside the context of a record are correct handlerF(CorrelationIds.get()) @@ -223,7 +253,7 @@ const invokeSqsHandler = (event, awsRequestId, sampleDebugLogRate, handlerF, rec cb(null) }) - handler.use(captureCorrelationIds({ sampleDebugLogRate })) + handler.use(captureCorrelationIds(captureArg)) handler(event, { awsRequestId }, (err, result) => { if (err) { diff --git a/packages/lambda-powertools-middleware-correlation-ids/event-sources/dynamodb.js b/packages/lambda-powertools-middleware-correlation-ids/event-sources/dynamodb.js index 41cc02a7..c9c58f54 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/event-sources/dynamodb.js +++ b/packages/lambda-powertools-middleware-correlation-ids/event-sources/dynamodb.js @@ -15,7 +15,7 @@ function isMatch (event) { return event.Records[0].eventSource === 'aws:dynamodb' } -function captureCorrelationIds ({ Records }, context, sampleDebugLogRate) { +function captureCorrelationIds ({ Records }, context, sampleDebugLogRate, constructLoggerFn = (correlationIds) => new Log({ correlationIds })) { const awsRequestId = context.awsRequestId const events = Records .map(record => { @@ -62,7 +62,7 @@ function captureCorrelationIds ({ Records }, context, sampleDebugLogRate) { enumerable: false }, logger: { - value: new Log({ correlationIds: correlationIdsInstance }), + value: constructLoggerFn(correlationIdsInstance), enumerable: false } }) diff --git a/packages/lambda-powertools-middleware-correlation-ids/event-sources/firehose.js b/packages/lambda-powertools-middleware-correlation-ids/event-sources/firehose.js index dda04cd8..0715eafb 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/event-sources/firehose.js +++ b/packages/lambda-powertools-middleware-correlation-ids/event-sources/firehose.js @@ -8,7 +8,7 @@ function isMatch (event) { Array.isArray(event.records) } -function captureCorrelationIds ({ records }, context, sampleDebugLogRate) { +function captureCorrelationIds ({ records }, context, sampleDebugLogRate, constructLoggerFn = (correlationIds) => new Log({ correlationIds })) { const awsRequestId = context.awsRequestId const events = records .map(record => { @@ -41,7 +41,7 @@ function captureCorrelationIds ({ records }, context, sampleDebugLogRate) { enumerable: false }, logger: { - value: new Log({ correlationIds: correlationIdsInstance }), + value: constructLoggerFn(correlationIdsInstance), enumerable: false } }) diff --git a/packages/lambda-powertools-middleware-correlation-ids/event-sources/kinesis.js b/packages/lambda-powertools-middleware-correlation-ids/event-sources/kinesis.js index 167bfca0..372dea30 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/event-sources/kinesis.js +++ b/packages/lambda-powertools-middleware-correlation-ids/event-sources/kinesis.js @@ -14,7 +14,7 @@ function isMatch (event) { return event.Records[0].eventSource === 'aws:kinesis' } -function captureCorrelationIds ({ Records }, context, sampleDebugLogRate) { +function captureCorrelationIds ({ Records }, context, sampleDebugLogRate, constructLoggerFn = (correlationIds) => new Log({ correlationIds })) { const awsRequestId = context.awsRequestId const events = Records .map(record => { @@ -47,7 +47,7 @@ function captureCorrelationIds ({ Records }, context, sampleDebugLogRate) { enumerable: false }, logger: { - value: new Log({ correlationIds: correlationIdsInstance }), + value: constructLoggerFn(correlationIdsInstance), enumerable: false } }) diff --git a/packages/lambda-powertools-middleware-correlation-ids/event-sources/sqs.js b/packages/lambda-powertools-middleware-correlation-ids/event-sources/sqs.js index dba23693..58eed174 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/event-sources/sqs.js +++ b/packages/lambda-powertools-middleware-correlation-ids/event-sources/sqs.js @@ -14,7 +14,7 @@ function isMatch (event) { return event.Records[0].eventSource === 'aws:sqs' } -function captureCorrelationIds (event, context, sampleDebugLogRate) { +function captureCorrelationIds (event, context, sampleDebugLogRate, constructLoggerFn = (correlationIds) => new Log({ correlationIds })) { const awsRequestId = context.awsRequestId event.Records.forEach(record => { // the wrapped sqs client would put the correlation IDs in the MessageAttributes @@ -73,7 +73,7 @@ function captureCorrelationIds (event, context, sampleDebugLogRate) { enumerable: false }, logger: { - value: new Log({ correlationIds: correlationIdsInstance }), + value: constructLoggerFn(correlationIdsInstance), enumerable: false } }) diff --git a/packages/lambda-powertools-middleware-correlation-ids/index.d.ts b/packages/lambda-powertools-middleware-correlation-ids/index.d.ts new file mode 100644 index 00000000..81f77ed2 --- /dev/null +++ b/packages/lambda-powertools-middleware-correlation-ids/index.d.ts @@ -0,0 +1,63 @@ +import middy from "@middy/core"; +import { + Context, + SQSRecord, + Handler, + DynamoDBRecord, + DynamoDBStreamEvent, + Callback, + FirehoseTransformationEvent, + FirehoseTransformationResult, + KinesisStreamEvent, +} from "aws-lambda"; +import Log from "@dazn/lambda-powertools-logger"; +import CorrelationIds from "@dazn/lambda-powertools-correlation-ids"; + +export default function (params: { + sampleDebugLogRate: number; + constructLoggerFn?: (correlationIds: CorrelationIds) => L; +}): middy.MiddlewareObject; + +export type ExtractedCorrelationIdAndLogger = { + logger: L; + correlationIds: CorrelationIds; +}; + +export type SQSEvent = { + Records: (SQSRecord & ExtractedCorrelationIdAndLogger)[]; +}; + +export type SQSHandler = Handler, void>; + +export type KinesisContext = Context & { + parsedKinesisEvents: ((T & ExtractedCorrelationIdAndLogger) | undefined)[]; +}; + +export type KinesisStreamHandler = ( + event: KinesisStreamEvent, + context: KinesisContext, + callback: Callback +) => void | Promise; + +export type FirehoseContext = Context & { + parsedFirehoseEvents: ( + | (T & ExtractedCorrelationIdAndLogger) + | undefined + )[]; +}; + +export type FirehoseTransformationHandler = ( + event: FirehoseTransformationEvent, + context: FirehoseContext, + callback: Callback +) => void | Promise; + +export type DynamoStreamsContext = Context & { + parsedDynamoDbEvents: (DynamoDBRecord & ExtractedCorrelationIdAndLogger)[]; +}; + +export type DynamoDBStreamHandler = ( + event: DynamoDBStreamEvent, + context: DynamoStreamsContext, + callback: Callback +) => void | Promise; diff --git a/packages/lambda-powertools-middleware-correlation-ids/index.js b/packages/lambda-powertools-middleware-correlation-ids/index.js index b6018024..e60f4435 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/index.js +++ b/packages/lambda-powertools-middleware-correlation-ids/index.js @@ -1,5 +1,4 @@ const CorrelationIds = require('@dazn/lambda-powertools-correlation-ids') - const generic = require('./event-sources/generic') const eventSources = [ require('./event-sources/api-gateway'), @@ -13,7 +12,7 @@ const eventSources = [ require('./event-sources/direct-invoke') ] -module.exports = ({ sampleDebugLogRate }) => { +module.exports = ({ sampleDebugLogRate, constructLoggerFn }) => { return { before: (handler, next) => { CorrelationIds.clearAll() @@ -21,7 +20,7 @@ module.exports = ({ sampleDebugLogRate }) => { const { event, context } = handler const eventSource = eventSources.find(evtSrc => evtSrc.isMatch(event)) if (eventSource) { - eventSource.captureCorrelationIds(event, context, sampleDebugLogRate) + eventSource.captureCorrelationIds(event, context, sampleDebugLogRate, constructLoggerFn) } else { generic.captureCorrelationIds(event, context, sampleDebugLogRate) } diff --git a/packages/lambda-powertools-middleware-correlation-ids/package-lock.json b/packages/lambda-powertools-middleware-correlation-ids/package-lock.json index c1623635..2d5312f3 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/package-lock.json +++ b/packages/lambda-powertools-middleware-correlation-ids/package-lock.json @@ -5,16 +5,16 @@ "requires": true, "dependencies": { "@dazn/lambda-powertools-correlation-ids": { - "version": "1.23.0", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-correlation-ids/-/lambda-powertools-correlation-ids-1.23.0.tgz", - "integrity": "sha1-C9MqpxQp8i09+mEW6KlALZ0bMvg=" + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-correlation-ids/-/lambda-powertools-correlation-ids-1.24.1.tgz", + "integrity": "sha512-03kwqDKpeuPDtOzRl+cGN+1g4AJ5sXubMla+ph4p3FqZRkcCOTWRrNoX+O+NMTRWZOojyhAi+comaoHMaEVY0A==" }, "@dazn/lambda-powertools-logger": { - "version": "1.23.1", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-logger/-/lambda-powertools-logger-1.23.1.tgz", - "integrity": "sha1-y59Pvk7eyEvfzO6kGdvtVMcMQLc=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-logger/-/lambda-powertools-logger-1.24.1.tgz", + "integrity": "sha512-nAYPnF0XWZ/WUY1TA06EFaX35djpCPWpRWIbmQZFBo/AKn8ekR2EpqYKduUTBnbC5IKPiTKFQgfk1togF+RFEg==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1" } }, "@middy/core": { @@ -26,6 +26,12 @@ "once": "^1.4.0" } }, + "@types/aws-lambda": { + "version": "8.10.57", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.57.tgz", + "integrity": "sha512-LMOA9bJLerYoe2KvzHugfaLTa0jUPWrqwxq5VUZ/ZuAMKLJm6oNdCio38vw8jWEIAkPR3P6mBIwnU1DPgelAKg==", + "dev": true + }, "aws-sdk": { "version": "2.496.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.496.0.tgz", diff --git a/packages/lambda-powertools-middleware-correlation-ids/package.json b/packages/lambda-powertools-middleware-correlation-ids/package.json index 3de847ee..179453d6 100644 --- a/packages/lambda-powertools-middleware-correlation-ids/package.json +++ b/packages/lambda-powertools-middleware-correlation-ids/package.json @@ -3,6 +3,7 @@ "version": "1.24.1", "description": "Middy middleware for capturing correlation IDs from inbound event", "main": "index.js", + "types": "index.d.ts", "license": "MIT", "author": "Yan Cui", "dependencies": { @@ -11,6 +12,7 @@ }, "devDependencies": { "@middy/core": "^1.0.0", + "@types/aws-lambda": "^8.10.3", "aws-sdk": "^2.496.0", "lodash": "^4.17.15", "uuid": "^3.2.1" diff --git a/packages/lambda-powertools-middleware-obfuscater/README.md b/packages/lambda-powertools-middleware-obfuscater/README.md index 1cdcfead..fef98f4a 100644 --- a/packages/lambda-powertools-middleware-obfuscater/README.md +++ b/packages/lambda-powertools-middleware-obfuscater/README.md @@ -67,7 +67,7 @@ const handler = async (event, context) => { } module.exports = middy(handler) - .use(obfuscatedLogging({ sampleRate: 0.01, obfuscationFilters: ["example.example"] })) + .use(obfuscatedLogging.obfuscaterMiddleware({ sampleRate: 0.01, obfuscationFilters: ["example.example"] })) } ``` diff --git a/packages/lambda-powertools-pattern-basic/index.d.ts b/packages/lambda-powertools-pattern-basic/index.d.ts new file mode 100644 index 00000000..0404b5d8 --- /dev/null +++ b/packages/lambda-powertools-pattern-basic/index.d.ts @@ -0,0 +1,35 @@ +import middy from "@middy/core"; +import { Callback, Context } from "aws-lambda"; +export * from "@dazn/lambda-powertools-middleware-correlation-ids"; + +declare type EventType = T extends ( + event: infer EventArgType, + context: C, + callback: Callback +) => void + ? EventArgType + : T extends (event: infer EventArgType, context: C) => Promise + ? EventArgType + : never; + +declare type HandlerReturnType = T extends ( + event: any, + context: C +) => Promise + ? RetType + : T extends ( + event: any, + context: C, + callback: Callback + ) => void + ? RetType + : never; + +declare type AsyncHandler = + | ((event: any, context: C, callback: Callback) => void) + | ((event: any, context: C) => Promise); + +export default function < + H extends AsyncHandler, + C extends Context = Context +>(f: H): middy.Middy, HandlerReturnType, C>; diff --git a/packages/lambda-powertools-pattern-basic/package-lock.json b/packages/lambda-powertools-pattern-basic/package-lock.json index 91b5ea29..5bdef15b 100644 --- a/packages/lambda-powertools-pattern-basic/package-lock.json +++ b/packages/lambda-powertools-pattern-basic/package-lock.json @@ -5,42 +5,42 @@ "requires": true, "dependencies": { "@dazn/lambda-powertools-correlation-ids": { - "version": "1.23.0", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-correlation-ids/-/lambda-powertools-correlation-ids-1.23.0.tgz", - "integrity": "sha1-C9MqpxQp8i09+mEW6KlALZ0bMvg=" + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-correlation-ids/-/lambda-powertools-correlation-ids-1.24.1.tgz", + "integrity": "sha512-03kwqDKpeuPDtOzRl+cGN+1g4AJ5sXubMla+ph4p3FqZRkcCOTWRrNoX+O+NMTRWZOojyhAi+comaoHMaEVY0A==" }, "@dazn/lambda-powertools-logger": { - "version": "1.23.1", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-logger/-/lambda-powertools-logger-1.23.1.tgz", - "integrity": "sha1-y59Pvk7eyEvfzO6kGdvtVMcMQLc=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-logger/-/lambda-powertools-logger-1.24.1.tgz", + "integrity": "sha512-nAYPnF0XWZ/WUY1TA06EFaX35djpCPWpRWIbmQZFBo/AKn8ekR2EpqYKduUTBnbC5IKPiTKFQgfk1togF+RFEg==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1" } }, "@dazn/lambda-powertools-middleware-correlation-ids": { - "version": "1.23.2", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-middleware-correlation-ids/-/lambda-powertools-middleware-correlation-ids-1.23.2.tgz", - "integrity": "sha1-pzMCFjZtNyrxenI9394ldenmXTE=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-middleware-correlation-ids/-/lambda-powertools-middleware-correlation-ids-1.24.1.tgz", + "integrity": "sha512-5+owQuIG4ps1EtYrPr269HkTQBCkfSwnfXuxoNJ0ZJWDbA0g5Ol0N2WmFjxvA5bLzG+DVO3zKdv1Bpq8ub0GSQ==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0", - "@dazn/lambda-powertools-logger": "^1.23.1" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1", + "@dazn/lambda-powertools-logger": "^1.24.1" } }, "@dazn/lambda-powertools-middleware-log-timeout": { - "version": "1.23.2", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-middleware-log-timeout/-/lambda-powertools-middleware-log-timeout-1.23.2.tgz", - "integrity": "sha1-pd8/kZiPBdmViO7639hm7dAPt9w=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-middleware-log-timeout/-/lambda-powertools-middleware-log-timeout-1.24.1.tgz", + "integrity": "sha512-015W29kYj3bdLWn3EZqcWzJ0Rvn1J3e+CIB6fdIEiaXujfb62zURUrdemufCZzZ8VXo5TZ/o//Qqwsjpk9QP3w==", "requires": { - "@dazn/lambda-powertools-logger": "^1.23.1" + "@dazn/lambda-powertools-logger": "^1.24.1" } }, "@dazn/lambda-powertools-middleware-sample-logging": { - "version": "1.23.2", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-middleware-sample-logging/-/lambda-powertools-middleware-sample-logging-1.23.2.tgz", - "integrity": "sha1-ek8qdzpkaGoXF3BWOTh3AwBAC0s=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-middleware-sample-logging/-/lambda-powertools-middleware-sample-logging-1.24.1.tgz", + "integrity": "sha512-oTjNCTudG9xwBnl/0TixSFbNZ5G95BOocp7FG3mY+NGpKS7ik0w1fexMbev3dRXecApU8UiEzB/devZkCoUnWQ==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0", - "@dazn/lambda-powertools-logger": "^1.23.1" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1", + "@dazn/lambda-powertools-logger": "^1.24.1" } }, "@middy/core": { @@ -51,6 +51,12 @@ "once": "^1.4.0" } }, + "@types/aws-lambda": { + "version": "8.10.57", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.57.tgz", + "integrity": "sha512-LMOA9bJLerYoe2KvzHugfaLTa0jUPWrqwxq5VUZ/ZuAMKLJm6oNdCio38vw8jWEIAkPR3P6mBIwnU1DPgelAKg==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", diff --git a/packages/lambda-powertools-pattern-basic/package.json b/packages/lambda-powertools-pattern-basic/package.json index 68036e9d..beeccb4d 100644 --- a/packages/lambda-powertools-pattern-basic/package.json +++ b/packages/lambda-powertools-pattern-basic/package.json @@ -3,6 +3,7 @@ "version": "1.24.1", "description": "Basic template that configures a 1% smaple rate for debug logs", "main": "index.js", + "types": "index.d.ts", "license": "MIT", "author": "Yan Cui", "dependencies": { @@ -13,5 +14,8 @@ }, "publishConfig": { "access": "public" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.57" } } diff --git a/packages/lambda-powertools-pattern-obfuscate/README.md b/packages/lambda-powertools-pattern-obfuscate/README.md index 7f02c80b..78533687 100644 --- a/packages/lambda-powertools-pattern-obfuscate/README.md +++ b/packages/lambda-powertools-pattern-obfuscate/README.md @@ -27,7 +27,7 @@ Install from NPM: `npm install @dazn/lambda-powertools-pattern-obfuscate` ```js const obfuscatedWrap = require('@dazn/lambda-powertools-pattern-obfuscated') -module.exports.handler = obfuscatedWrap(['Records.*.firstName', 'Records.*.lastName'], async (event, context) => { +module.exports.handler = obfuscatedWrap.obfuscaterPattern(['Records.*.firstName', 'Records.*.lastName'], async (event, context) => { return 42 }) ``` diff --git a/packages/lambda-powertools-pattern-obfuscate/index.d.ts b/packages/lambda-powertools-pattern-obfuscate/index.d.ts new file mode 100644 index 00000000..a4d4ba5b --- /dev/null +++ b/packages/lambda-powertools-pattern-obfuscate/index.d.ts @@ -0,0 +1,51 @@ +import middy from "@middy/core"; +import { Callback, Context } from "aws-lambda"; +export * from "@dazn/lambda-powertools-middleware-correlation-ids"; + +declare type EventType = T extends ( + event: infer EventArgType, + context: C, + callback: Callback +) => void + ? EventArgType + : T extends (event: infer EventArgType, context: C) => Promise + ? EventArgType + : never; + +declare type HandlerReturnType = T extends ( + event: any, + context: C +) => Promise + ? RetType + : T extends ( + event: any, + context: C, + callback: Callback + ) => void + ? RetType + : never; + +declare type AsyncHandler = + | ((event: any, context: C, callback: Callback) => void) + | ((event: any, context: C) => Promise); + +declare enum FILTERING_MODE { + BLACKLIST = "BLACKLIST", + WHITELIST = "WHITELIST", +} + +declare namespace dazn__lambda_powertools_pattern_obfuscate { + const FILTERING_MODE: FILTERING_MODE; + + function obfuscaterPattern< + H extends AsyncHandler, + C extends Context = Context + >( + obfuscationFilters: string[], + f: H, + filterOnAfter?: boolean, + filteringMode?: FILTERING_MODE + ): middy.Middy, HandlerReturnType, C>; +} + +export default dazn__lambda_powertools_pattern_obfuscate; diff --git a/packages/lambda-powertools-pattern-obfuscate/package-lock.json b/packages/lambda-powertools-pattern-obfuscate/package-lock.json index dd0d1148..bf7e8740 100644 --- a/packages/lambda-powertools-pattern-obfuscate/package-lock.json +++ b/packages/lambda-powertools-pattern-obfuscate/package-lock.json @@ -50,51 +50,51 @@ } }, "@dazn/lambda-powertools-correlation-ids": { - "version": "1.23.0", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-correlation-ids/-/lambda-powertools-correlation-ids-1.23.0.tgz", - "integrity": "sha1-C9MqpxQp8i09+mEW6KlALZ0bMvg=" + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-correlation-ids/-/lambda-powertools-correlation-ids-1.24.1.tgz", + "integrity": "sha512-03kwqDKpeuPDtOzRl+cGN+1g4AJ5sXubMla+ph4p3FqZRkcCOTWRrNoX+O+NMTRWZOojyhAi+comaoHMaEVY0A==" }, "@dazn/lambda-powertools-logger": { - "version": "1.23.1", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-logger/-/lambda-powertools-logger-1.23.1.tgz", - "integrity": "sha1-y59Pvk7eyEvfzO6kGdvtVMcMQLc=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-logger/-/lambda-powertools-logger-1.24.1.tgz", + "integrity": "sha512-nAYPnF0XWZ/WUY1TA06EFaX35djpCPWpRWIbmQZFBo/AKn8ekR2EpqYKduUTBnbC5IKPiTKFQgfk1togF+RFEg==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1" } }, "@dazn/lambda-powertools-middleware-correlation-ids": { - "version": "1.23.2", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-middleware-correlation-ids/-/lambda-powertools-middleware-correlation-ids-1.23.2.tgz", - "integrity": "sha1-pzMCFjZtNyrxenI9394ldenmXTE=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-middleware-correlation-ids/-/lambda-powertools-middleware-correlation-ids-1.24.1.tgz", + "integrity": "sha512-5+owQuIG4ps1EtYrPr269HkTQBCkfSwnfXuxoNJ0ZJWDbA0g5Ol0N2WmFjxvA5bLzG+DVO3zKdv1Bpq8ub0GSQ==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0", - "@dazn/lambda-powertools-logger": "^1.23.1" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1", + "@dazn/lambda-powertools-logger": "^1.24.1" } }, "@dazn/lambda-powertools-middleware-log-timeout": { - "version": "1.23.2", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-middleware-log-timeout/-/lambda-powertools-middleware-log-timeout-1.23.2.tgz", - "integrity": "sha1-pd8/kZiPBdmViO7639hm7dAPt9w=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-middleware-log-timeout/-/lambda-powertools-middleware-log-timeout-1.24.1.tgz", + "integrity": "sha512-015W29kYj3bdLWn3EZqcWzJ0Rvn1J3e+CIB6fdIEiaXujfb62zURUrdemufCZzZ8VXo5TZ/o//Qqwsjpk9QP3w==", "requires": { - "@dazn/lambda-powertools-logger": "^1.23.1" + "@dazn/lambda-powertools-logger": "^1.24.1" } }, "@dazn/lambda-powertools-middleware-obfuscater": { - "version": "1.23.2", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-middleware-obfuscater/-/lambda-powertools-middleware-obfuscater-1.23.2.tgz", - "integrity": "sha1-mMysgqN/HfhQdkTz6C/OsCYG0ug=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-middleware-obfuscater/-/lambda-powertools-middleware-obfuscater-1.24.1.tgz", + "integrity": "sha512-nuSKalP9jdii9hSZ7tbuuMdbS2J9YmKteBw+bA9Zw1sJGGUCzVblb6SPl84IRYbHt4jcY+G9vVvDBj9+B3/bvQ==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0", - "@dazn/lambda-powertools-logger": "^1.23.1" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1", + "@dazn/lambda-powertools-logger": "^1.24.1" } }, "@dazn/lambda-powertools-middleware-sample-logging": { - "version": "1.23.2", - "resolved": "https://npm.daznplatform.com/@dazn/lambda-powertools-middleware-sample-logging/-/lambda-powertools-middleware-sample-logging-1.23.2.tgz", - "integrity": "sha1-ek8qdzpkaGoXF3BWOTh3AwBAC0s=", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/@dazn/lambda-powertools-middleware-sample-logging/-/lambda-powertools-middleware-sample-logging-1.24.1.tgz", + "integrity": "sha512-oTjNCTudG9xwBnl/0TixSFbNZ5G95BOocp7FG3mY+NGpKS7ik0w1fexMbev3dRXecApU8UiEzB/devZkCoUnWQ==", "requires": { - "@dazn/lambda-powertools-correlation-ids": "^1.23.0", - "@dazn/lambda-powertools-logger": "^1.23.1" + "@dazn/lambda-powertools-correlation-ids": "^1.24.1", + "@dazn/lambda-powertools-logger": "^1.24.1" } }, "@middy/core": { @@ -105,6 +105,12 @@ "once": "^1.4.0" } }, + "@types/aws-lambda": { + "version": "8.10.57", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.57.tgz", + "integrity": "sha512-LMOA9bJLerYoe2KvzHugfaLTa0jUPWrqwxq5VUZ/ZuAMKLJm6oNdCio38vw8jWEIAkPR3P6mBIwnU1DPgelAKg==", + "dev": true + }, "abab": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", diff --git a/packages/lambda-powertools-pattern-obfuscate/package.json b/packages/lambda-powertools-pattern-obfuscate/package.json index d1067f33..9f016ea9 100644 --- a/packages/lambda-powertools-pattern-obfuscate/package.json +++ b/packages/lambda-powertools-pattern-obfuscate/package.json @@ -3,6 +3,7 @@ "version": "1.24.1", "description": "Basic template that configures a 1% smaple rate for debug logs and obfuscation", "main": "index.js", + "types": "index.d.ts", "scripts": {}, "license": "MIT", "author": "Yan Cui", @@ -14,7 +15,8 @@ "@middy/core": "^1.0.0" }, "devDependencies": { - "jest": "^23.1.0" + "jest": "^23.1.0", + "@types/aws-lambda": "^8.10.57" }, "jest": { "testEnvironment": "node"