@spytecgps/lambda-utils 0.9.22 → 0.9.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.d.ts CHANGED
@@ -24,10 +24,17 @@ export interface WrapperArgs<E, R> {
24
24
  context?: APIGatewayEventRequestContext;
25
25
  schema?: ObjectSchema<E>;
26
26
  handler: Handler<E, R>;
27
+ metricsHandler?: MetricsHandler;
27
28
  }
28
29
  export declare type UserAPIHandler<TEvent = APIGatewayProxyWithLambdaAuthorizerEvent<SpytecAuthContext>, TResult = any> = (event: TEvent, context: APIGatewayEventRequestContext, callback: Callback<TResult>) => void | Promise<TResult>;
29
30
  export declare type ServerAPIHandler<TResult = any> = (event: APIGatewayProxyWithCognitoAuthorizerEvent, context: APIGatewayEventRequestContext, callback: Callback<TResult>) => void | Promise<TResult>;
30
31
  export declare type Handler<E, R> = (event: E) => Promise<HandlerResponse<R>>;
32
+ export declare type MetricsHandler = (event: APIGatewayProxyEvent, metrics: RequestMetrics) => Promise<void>;
33
+ export interface RequestMetrics {
34
+ requestStart: Date;
35
+ requestEnd: Date;
36
+ statusCode: number;
37
+ }
31
38
  export interface HandlerResponse<R> {
32
39
  statusCode?: number;
33
40
  headers?: {
@@ -1,4 +1,4 @@
1
1
  import { APIGatewayProxyResult } from 'aws-lambda';
2
2
  import { WrapperArgs } from '../types';
3
- declare const apiGatewayEventWrapper: <E, R>({ event, context, schema, handler, }: WrapperArgs<E, R>) => Promise<APIGatewayProxyResult>;
3
+ declare const apiGatewayEventWrapper: <E, R>({ event, context, schema, handler, metricsHandler, }: WrapperArgs<E, R>) => Promise<APIGatewayProxyResult>;
4
4
  export default apiGatewayEventWrapper;
@@ -46,35 +46,73 @@ var logEvent = function (e) { return ({
46
46
  pathParameters: e.pathParameters,
47
47
  body: e.body,
48
48
  }); };
49
+ var safeExecuteMetricsHandler = function (metricsHandler, event, metrics) { return __awaiter(void 0, void 0, void 0, function () {
50
+ var err_1;
51
+ return __generator(this, function (_a) {
52
+ switch (_a.label) {
53
+ case 0:
54
+ if (!metricsHandler) {
55
+ return [2 /*return*/];
56
+ }
57
+ _a.label = 1;
58
+ case 1:
59
+ _a.trys.push([1, 3, , 4]);
60
+ return [4 /*yield*/, metricsHandler(event, metrics)];
61
+ case 2:
62
+ _a.sent();
63
+ return [3 /*break*/, 4];
64
+ case 3:
65
+ err_1 = _a.sent();
66
+ sdk_1.logger.warn(err_1, "apiGatewayWrapper - caught error on metrics handler");
67
+ return [3 /*break*/, 4];
68
+ case 4: return [2 /*return*/];
69
+ }
70
+ });
71
+ }); };
49
72
  var apiGatewayEventWrapper = function (_a) {
50
- var event = _a.event, context = _a.context, schema = _a.schema, handler = _a.handler;
73
+ var event = _a.event, context = _a.context, schema = _a.schema, handler = _a.handler, metricsHandler = _a.metricsHandler;
51
74
  return __awaiter(void 0, void 0, void 0, function () {
52
- var start, validatedEvent, result, err_1;
53
- return __generator(this, function (_b) {
54
- switch (_b.label) {
75
+ var start, validatedEvent, result, err_2;
76
+ var _b;
77
+ return __generator(this, function (_c) {
78
+ switch (_c.label) {
55
79
  case 0:
56
80
  start = new Date().getTime();
57
81
  if (event && context) {
58
82
  sdk_1.logger.withRequest(event, context);
59
83
  }
60
84
  sdk_1.logger.info(logEvent(event), "apiGatewayWrapper - got event");
61
- _b.label = 1;
85
+ _c.label = 1;
62
86
  case 1:
63
- _b.trys.push([1, 3, , 4]);
87
+ _c.trys.push([1, 4, , 6]);
64
88
  validatedEvent = validation_1.validateEvent(event, schema);
65
89
  return [4 /*yield*/, handler(validatedEvent)];
66
90
  case 2:
67
- result = _b.sent();
91
+ result = _c.sent();
68
92
  sdk_1.logger.info({ result: result, requestTime: new Date().getTime() - start }, "apiGatewayWrapper - finished");
69
- return [2 /*return*/, response_1.buildProxyResult(result)];
93
+ return [4 /*yield*/, safeExecuteMetricsHandler(metricsHandler, event, {
94
+ requestStart: new Date(start),
95
+ requestEnd: new Date(),
96
+ statusCode: (_b = result === null || result === void 0 ? void 0 : result.statusCode) !== null && _b !== void 0 ? _b : 200,
97
+ })];
70
98
  case 3:
71
- err_1 = _b.sent();
72
- sdk_1.logger.error({ err: err_1 }, "apiGatewayWrapper - caught error");
99
+ _c.sent();
100
+ return [2 /*return*/, response_1.buildProxyResult(result)];
101
+ case 4:
102
+ err_2 = _c.sent();
103
+ sdk_1.logger.error({ err: err_2 }, "apiGatewayWrapper - caught error");
104
+ return [4 /*yield*/, safeExecuteMetricsHandler(metricsHandler, event, {
105
+ requestStart: new Date(start),
106
+ requestEnd: new Date(),
107
+ statusCode: err_2.code || 500,
108
+ })];
109
+ case 5:
110
+ _c.sent();
73
111
  return [2 /*return*/, response_1.buildProxyResult({
74
- statusCode: err_1.code || 500,
75
- message: err_1.message || 'Error',
112
+ statusCode: err_2.code || 500,
113
+ message: err_2.message || 'Error',
76
114
  })];
77
- case 4: return [2 /*return*/];
115
+ case 6: return [2 /*return*/];
78
116
  }
79
117
  });
80
118
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spytecgps/lambda-utils",
3
- "version": "0.9.22",
3
+ "version": "0.9.23",
4
4
  "description": "Lambda Utils",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",