@spytecgps/lambda-utils 1.0.0-rc4 → 1.0.0-rc6

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/index.d.ts CHANGED
@@ -3,3 +3,4 @@ export * from './errors';
3
3
  export * from './validation';
4
4
  export * from './types';
5
5
  export * from './middleware';
6
+ export * from './logger/logger';
package/dist/index.js CHANGED
@@ -15,3 +15,4 @@ __exportStar(require("./errors"), exports);
15
15
  __exportStar(require("./validation"), exports);
16
16
  __exportStar(require("./types"), exports);
17
17
  __exportStar(require("./middleware"), exports);
18
+ __exportStar(require("./logger/logger"), exports);
@@ -0,0 +1,4 @@
1
+ export declare const isLocal: () => boolean;
2
+ export declare const isTest: () => boolean;
3
+ declare const logger: import("winston").Logger;
4
+ export default logger;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTest = exports.isLocal = void 0;
4
+ var winston_1 = require("winston");
5
+ var winston_console_format_1 = require("winston-console-format");
6
+ var combine = winston_1.format.combine, errors = winston_1.format.errors, json = winston_1.format.json, timestamp = winston_1.format.timestamp, colorize = winston_1.format.colorize, padLevels = winston_1.format.padLevels;
7
+ exports.isLocal = function () { return !!process.env.IS_OFFLINE; };
8
+ exports.isTest = function () { return process.env.NODE_ENV == 'test'; };
9
+ var replaceError = function (_a) {
10
+ var label = _a.label, level = _a.level, message = _a.message, stack = _a.stack;
11
+ return ({
12
+ label: label,
13
+ level: level,
14
+ message: message,
15
+ stack: stack,
16
+ });
17
+ };
18
+ var replacer = function (_key, value) {
19
+ // @ts-ignore
20
+ return value instanceof Error ? replaceError(value) : value;
21
+ };
22
+ function getDevFormat() {
23
+ return combine(timestamp(), colorize({ all: true }), padLevels(), winston_console_format_1.consoleFormat({
24
+ showMeta: true,
25
+ metaStrip: [
26
+ 'timestamp',
27
+ 'service',
28
+ 'requestId',
29
+ 'x-correlation-id',
30
+ 'function',
31
+ 'contextUserId',
32
+ 'contextUserEmail',
33
+ ],
34
+ inspectOptions: {
35
+ depth: Infinity,
36
+ colors: true,
37
+ maxArrayLength: Infinity,
38
+ breakLength: 120,
39
+ compact: Infinity,
40
+ },
41
+ }));
42
+ }
43
+ function getProductionFormat() {
44
+ return combine(errors({ stack: true }), timestamp(), json({ replacer: replacer }));
45
+ }
46
+ function getFormat() {
47
+ if (exports.isTest() || exports.isLocal()) {
48
+ return getDevFormat();
49
+ }
50
+ return getProductionFormat();
51
+ }
52
+ var logger = winston_1.createLogger({
53
+ level: exports.isTest() || exports.isLocal() ? 'info' : 'verbose',
54
+ defaultMeta: {},
55
+ format: getFormat(),
56
+ transports: [new winston_1.transports.Console()],
57
+ });
58
+ exports.default = logger;
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Adapted from https://github.com/FormidableLabs/pino-lambda/blob/master/src/request.ts
3
+ */
1
4
  export declare const contextualLogger: () => {
2
5
  before: ({ event, context }: {
3
6
  event: any;
@@ -35,15 +35,50 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
35
35
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
36
  }
37
37
  };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
38
41
  Object.defineProperty(exports, "__esModule", { value: true });
39
42
  exports.contextualLoggerMiddleware = exports.contextualLogger = void 0;
40
- var sdk_1 = require("@spytecgps/sdk");
43
+ var logger_1 = __importDefault(require("../logger/logger"));
44
+ var AMAZON_TRACE_ID = '_X_AMZN_TRACE_ID';
45
+ var CORRELATION_HEADER = 'x-correlation-';
46
+ var CORRELATION_ID = CORRELATION_HEADER + "id";
47
+ var CORRELATION_TRACE_ID = CORRELATION_HEADER + "trace-id";
48
+ /**
49
+ * Adapted from https://github.com/FormidableLabs/pino-lambda/blob/master/src/request.ts
50
+ */
41
51
  exports.contextualLogger = function () {
52
+ var ctx = logger_1.default.defaultMeta;
42
53
  var before = function (_a) {
43
54
  var event = _a.event, context = _a.context;
44
55
  return __awaiter(void 0, void 0, void 0, function () {
45
- return __generator(this, function (_b) {
46
- sdk_1.logger.withRequest(event, context);
56
+ var apiEvent_1;
57
+ var _b, _c, _d, _e, _f, _g, _h;
58
+ return __generator(this, function (_j) {
59
+ if (context) {
60
+ ctx.requestId = context === null || context === void 0 ? void 0 : context.awsRequestId;
61
+ ctx.function = context.functionName;
62
+ }
63
+ if (!ctx.requestId) {
64
+ ctx.requestId = (_b = event === null || event === void 0 ? void 0 : event.requestContext) === null || _b === void 0 ? void 0 : _b.requestId;
65
+ }
66
+ if (Object(event).hasOwnProperty('headers')) {
67
+ apiEvent_1 = event;
68
+ Object.keys(apiEvent_1).forEach(function (header) {
69
+ if (header.toLowerCase().startsWith(CORRELATION_HEADER)) {
70
+ ctx[header] = apiEvent_1[header];
71
+ }
72
+ });
73
+ }
74
+ if (process.env[AMAZON_TRACE_ID]) {
75
+ ctx[CORRELATION_TRACE_ID] = process.env[AMAZON_TRACE_ID];
76
+ }
77
+ if (!ctx[CORRELATION_ID]) {
78
+ ctx[CORRELATION_ID] = context === null || context === void 0 ? void 0 : context.awsRequestId;
79
+ }
80
+ ctx.contextUserId = (_e = (_d = (_c = event === null || event === void 0 ? void 0 : event.requestContext) === null || _c === void 0 ? void 0 : _c.authorizer) === null || _d === void 0 ? void 0 : _d.claims) === null || _e === void 0 ? void 0 : _e.userId;
81
+ ctx.contextUserEmail = (_h = (_g = (_f = event === null || event === void 0 ? void 0 : event.requestContext) === null || _f === void 0 ? void 0 : _f.authorizer) === null || _g === void 0 ? void 0 : _g.claims) === null || _h === void 0 ? void 0 : _h.email;
47
82
  return [2 /*return*/];
48
83
  });
49
84
  });
@@ -20,8 +20,8 @@ var contextualLogger_1 = require("./contextualLogger");
20
20
  var ioLogger_1 = require("./ioLogger");
21
21
  var validation_1 = require("./validation");
22
22
  Object.defineProperty(exports, "validatorMiddleware", { enumerable: true, get: function () { return validation_1.validatorMiddleware; } });
23
- var sdk_1 = require("@spytecgps/sdk");
24
23
  var responseWrapper_1 = require("./responseWrapper");
24
+ var logger_1 = __importDefault(require("../logger/logger"));
25
25
  var baseMiddlewares = [contextualLogger_1.contextualLoggerMiddleware, ioLogger_1.ioLoggerMiddleware];
26
26
  var apiGatewayMiddlewares = [
27
27
  http_response_serializer_1.default({
@@ -51,7 +51,7 @@ var apiGatewayMiddlewares = [
51
51
  default: 'application/json',
52
52
  }),
53
53
  http_error_handler_1.default({
54
- logger: function (error) { return sdk_1.logger.error(error); },
54
+ logger: function (error) { return logger_1.default.error(error); },
55
55
  }),
56
56
  responseWrapper_1.responseWrapperMiddleware(),
57
57
  ];
@@ -5,10 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ioLoggerMiddleware = void 0;
7
7
  var input_output_logger_1 = __importDefault(require("@middy/input-output-logger"));
8
- var sdk_1 = require("@spytecgps/sdk");
8
+ var logger_1 = __importDefault(require("../logger/logger"));
9
9
  exports.ioLoggerMiddleware = input_output_logger_1.default({
10
10
  logger: function (req) {
11
11
  var message = (req === null || req === void 0 ? void 0 : req.event) ? 'event' : 'response';
12
- sdk_1.logger.info(req, message);
12
+ logger_1.default.info(message, req);
13
13
  },
14
14
  });
@@ -4,7 +4,6 @@ exports.responseWrapperMiddleware = void 0;
4
4
  var wrappers_1 = require("../wrappers");
5
5
  exports.responseWrapperMiddleware = function () {
6
6
  var responseWrapperMiddlewareAfter = function (req) {
7
- console.log(req);
8
7
  req.response = wrappers_1.buildProxyResult(req.response);
9
8
  };
10
9
  return {
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.validatorMiddleware = void 0;
4
- var sdk_1 = require("@spytecgps/sdk");
5
7
  var errors_1 = require("../errors");
8
+ var logger_1 = __importDefault(require("../logger/logger"));
6
9
  exports.validatorMiddleware = function (_a) {
7
10
  var schema = _a.schema, _b = _a.allowUnknown, allowUnknown = _b === void 0 ? true : _b;
8
11
  var validatorMiddlewareBefore = function (request) {
@@ -16,7 +19,7 @@ exports.validatorMiddleware = function (_a) {
16
19
  },
17
20
  }), error = _a.error, value = _a.value;
18
21
  if (error) {
19
- sdk_1.logger.error({ error: error }, 'Validation error');
22
+ logger_1.default.error('Validation error', { error: error });
20
23
  throw error.isJoi ? new errors_1.BadRequestError(error.message) : error;
21
24
  }
22
25
  request.event = value;
package/dist/types.d.ts CHANGED
@@ -7,10 +7,12 @@ export interface SpytecAuthorizedResources {
7
7
  devices: string[];
8
8
  }
9
9
  export declare type AuthClass = 'user' | 'client' | 'system';
10
+ export declare type DevicesAccess = 'full' | 'limited';
10
11
  export interface SpytecAuthContext {
11
12
  type: AuthClass;
12
13
  userId?: string;
13
14
  clientId: number;
15
+ devicesAccess: DevicesAccess;
14
16
  resources: SpytecAuthorizedResources;
15
17
  principalId: string;
16
18
  scope?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spytecgps/lambda-utils",
3
- "version": "1.0.0-rc4",
3
+ "version": "1.0.0-rc6",
4
4
  "description": "Lambda Utils",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -32,9 +32,12 @@
32
32
  "@middy/input-output-logger": "^2.5.7",
33
33
  "@spytecgps/sdk": "0.5.34",
34
34
  "joi": "^17.4.0",
35
+ "logform": "^2.4.0",
35
36
  "moment": "2.29.1",
36
37
  "moment-timezone": "0.5.33",
37
- "qs": "^6.10.1"
38
+ "qs": "^6.10.1",
39
+ "winston": "^3.7.2",
40
+ "winston-console-format": "^1.0.8"
38
41
  },
39
42
  "devDependencies": {
40
43
  "@types/aws-lambda": "^8.10.76",