@levrbet/shared 0.2.16 → 0.2.17

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.
@@ -2,14 +2,11 @@ import winston from "winston";
2
2
  export interface LoggerOptions {
3
3
  service?: string;
4
4
  level?: string;
5
- additionalMeta?: Record<string, any>;
5
+ extra?: Record<string, unknown>;
6
6
  }
7
- export declare const createLogger: (options?: LoggerOptions) => winston.Logger;
7
+ export declare const createLogger: ({ service, level, extra }?: LoggerOptions) => winston.Logger;
8
8
  declare const logger: winston.Logger;
9
- export declare const createStream: (loggerInstance?: winston.Logger) => {
10
- write: (message: string) => void;
11
- };
12
- export declare const stream: {
13
- write: (message: string) => void;
14
- };
15
9
  export default logger;
10
+ export declare const createMorganStream: (log?: winston.Logger) => {
11
+ write: (msg: string) => winston.Logger;
12
+ };
@@ -3,148 +3,58 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.stream = exports.createStream = exports.createLogger = void 0;
6
+ exports.createMorganStream = exports.createLogger = void 0;
7
7
  const winston_1 = __importDefault(require("winston"));
8
8
  const dotenv_1 = require("./dotenv");
9
- /**
10
- * @dev exporting a configured Winston logger instance
11
- *
12
- * In another service using the library:
13
- import { createLogger, createStream } from "@levrbet/shared"
14
-
15
- // Create a custom logger
16
- const logger = createLogger({
17
- service: "levr-oracle-core",
18
- additionalMeta: {
19
- version: "1.0.0",
20
- region: "ap-south-1"
21
- }
22
- })
23
-
24
- // Use with Morgan for HTTP request logging
25
- import morgan from "express"
26
- const morganStream = createStream(logger)
27
- app.use(morgan("combined", { stream: morganStream }))
28
-
29
- // Or just use the default
30
- import logger from "@levrbet/shared"
31
- logger.info("Using default logger")
32
- *
33
- */
34
- const { combine, timestamp, errors, json, printf, splat } = winston_1.default.format;
35
- // Determine log level based on environment
36
- const getLogLevel = () => {
37
- switch (dotenv_1.LEVR_ENV) {
38
- case "local":
39
- return "debug";
40
- case "dev":
41
- return "debug";
42
- case "staging":
43
- return "info";
44
- case "prod":
45
- return "error";
46
- default:
47
- return "info";
9
+ const { combine, timestamp, errors, json, printf, colorize, splat } = winston_1.default.format;
10
+ const LOG_LEVEL = {
11
+ local: "debug",
12
+ dev: "debug",
13
+ staging: "info",
14
+ prod: "error",
15
+ }[dotenv_1.LEVR_ENV] ?? "info";
16
+ /// @dev more detailed console format for local development
17
+ const devFormat = printf(({ level, message, timestamp, service, ...meta }) => {
18
+ // color the level
19
+ const colouredLevel = winston_1.default.format.colorize().colorize(level, level.toUpperCase());
20
+ // base line
21
+ let line = `${timestamp} ${colouredLevel}`;
22
+ if (service)
23
+ line += ` [${service}]`;
24
+ line += ` ${message}`;
25
+ // print any extra meta on a new line (pretty JSON)
26
+ const keys = Object.keys(meta);
27
+ if (keys.length) {
28
+ line += `\n${JSON.stringify(meta, null, 2)}`;
48
29
  }
49
- };
50
- // Color mapping for manual colorization
51
- const colors = {
52
- error: "\x1b[31m", // red
53
- warn: "\x1b[33m", // yellow
54
- info: "\x1b[36m", // cyan
55
- http: "\x1b[35m", // magenta
56
- verbose: "\x1b[90m", // gray
57
- debug: "\x1b[34m", // blue
58
- silly: "\x1b[90m", // gray
59
- };
60
- const reset = "\x1b[0m";
61
- // Custom format for console output in non-production
62
- const consoleFormat = printf((info) => {
63
- const { level, message, timestamp, stack, service, ...metadata } = info;
64
- const color = colors[level] || "";
65
- const coloredLevel = dotenv_1.LEVR_ENV === "prod" ? level : `${color}${level}${reset}`;
66
- let msg = `${timestamp} [${coloredLevel}]`;
67
- if (service) {
68
- msg += ` [${service}]`;
69
- }
70
- // Simple message handling
71
- if (typeof message === "string") {
72
- msg += `: ${message}`;
73
- }
74
- else if (message !== undefined && message !== null) {
75
- try {
76
- msg += `: ${JSON.stringify(message)}`;
77
- }
78
- catch {
79
- msg += `: ${String(message)}`;
80
- }
81
- }
82
- // Add stack trace if error
83
- if (stack) {
84
- msg += `\n${stack}`;
85
- }
86
- // Handle splat metadata (printf-style arguments)
87
- const splatData = metadata[Symbol.for("splat")];
88
- if (Array.isArray(splatData) && splatData.length > 0) {
89
- splatData.forEach((item) => {
90
- try {
91
- msg += ` ${typeof item === "string" ? item : JSON.stringify(item)}`;
92
- }
93
- catch {
94
- msg += ` ${String(item)}`;
95
- }
96
- });
97
- }
98
- // Add remaining metadata if present
99
- const relevantKeys = Object.keys(metadata).filter((key) => !["level", "message", "timestamp", "service", "environment", "splat"].includes(key));
100
- if (relevantKeys.length > 0) {
101
- const metaObj = Object.fromEntries(relevantKeys.map((key) => [key, metadata[key]]));
102
- try {
103
- msg += `\n${JSON.stringify(metaObj, null, 2)}`;
104
- }
105
- catch {
106
- msg += `\n${String(metaObj)}`;
107
- }
108
- }
109
- return msg;
30
+ return line;
110
31
  });
111
- // Production format (structured JSON for OTEL)
112
- const productionFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), errors({ stack: true }), splat(), json());
113
- // Development format (human-readable) - WITH splat() to handle multiple arguments
114
- const developmentFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), errors({ stack: true }), splat(), consoleFormat);
115
- const createLogger = (options = {}) => {
116
- const { service = "@levrbet/shared", level = getLogLevel(), additionalMeta = {} } = options;
117
- const winstonLogger = winston_1.default.createLogger({
32
+ /// @dev pure json format for otel collection
33
+ const prodFormat = combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), // ISO-ish
34
+ errors({ stack: true }), // stack traces as `error.stack`
35
+ splat(), // %s, %d, %j support
36
+ json() // final JSON string
37
+ );
38
+ const createLogger = ({ service = "unknown-levr-service", level = LOG_LEVEL, extra = {} } = {}) => {
39
+ return winston_1.default.createLogger({
118
40
  level,
119
- levels: winston_1.default.config.npm.levels,
120
- format: dotenv_1.LEVR_ENV === "prod" ? productionFormat : developmentFormat,
121
- defaultMeta: {
122
- service,
123
- environment: dotenv_1.LEVR_ENV,
124
- ...additionalMeta,
125
- },
41
+ format: dotenv_1.LEVR_ENV === "local" ? combine(colorize(), devFormat) : prodFormat,
42
+ defaultMeta: { service, environment: dotenv_1.LEVR_ENV, ...extra },
126
43
  transports: [
127
44
  new winston_1.default.transports.Console({
128
- stderrLevels: ["error"],
45
+ stderrLevels: ["error"], // error → stderr, everything else → stdout
129
46
  }),
130
47
  ],
131
48
  exitOnError: false,
132
49
  });
133
- return winstonLogger;
134
50
  };
135
51
  exports.createLogger = createLogger;
136
- // Default logger instance
137
- const logger = (0, exports.createLogger)();
138
- // Create stream for Morgan (HTTP logging)
139
- const createStream = (loggerInstance = logger) => ({
140
- write: (message) => {
141
- const msg = typeof message === "string" ? message.trim() : String(message);
142
- if (msg.length > 0) {
143
- loggerInstance.info(msg);
144
- }
145
- },
146
- });
147
- exports.createStream = createStream;
148
- exports.stream = (0, exports.createStream)();
52
+ /// @dev default logger for general use
53
+ const logger = (0, exports.createLogger)({ service: "@levr/shared" });
149
54
  exports.default = logger;
55
+ /// @dev Morgan stream adapter
56
+ const createMorganStream = (log = logger) => ({
57
+ write: (msg) => log.http(msg.trim()),
58
+ });
59
+ exports.createMorganStream = createMorganStream;
150
60
  //# sourceMappingURL=winston.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"winston.js","sourceRoot":"","sources":["../../../src/server/config/winston.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"winston.js","sourceRoot":"","sources":["../../../src/server/config/winston.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAC7B,qCAAmC;AAEnC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,iBAAO,CAAC,MAAM,CAAA;AAEpF,MAAM,SAAS,GACX;IACI,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,OAAO;IACZ,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,OAAO;CAChB,CAAC,iBAAQ,CAAC,IAAI,MAAM,CAAA;AAEzB,2DAA2D;AAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;IACzE,kBAAkB;IAClB,MAAM,aAAa,GAAG,iBAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAEpF,YAAY;IACZ,IAAI,IAAI,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAA;IAC1C,IAAI,OAAO;QAAE,IAAI,IAAI,KAAK,OAAO,GAAG,CAAA;IACpC,IAAI,IAAI,IAAI,OAAO,EAAE,CAAA;IAErB,mDAAmD;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;IAChD,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC,CAAC,CAAA;AAEF,6CAA6C;AAC7C,MAAM,UAAU,GAAG,OAAO,CACtB,SAAS,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,EAAE,UAAU;AACxD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,gCAAgC;AACzD,KAAK,EAAE,EAAE,qBAAqB;AAC9B,IAAI,EAAE,CAAC,oBAAoB;CAC9B,CAAA;AAQM,MAAM,YAAY,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,GAAG,EAAE,KAAoB,EAAE,EAAE,EAAE;IACpH,OAAO,iBAAO,CAAC,YAAY,CAAC;QACxB,KAAK;QACL,MAAM,EAAE,iBAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU;QAC1E,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAQ,EAAE,GAAG,KAAK,EAAE;QACzD,UAAU,EAAE;YACR,IAAI,iBAAO,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC3B,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,2CAA2C;aACvE,CAAC;SACL;QACD,WAAW,EAAE,KAAK;KACrB,CAAC,CAAA;AACN,CAAC,CAAA;AAZY,QAAA,YAAY,gBAYxB;AAED,uCAAuC;AACvC,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;AACxD,kBAAe,MAAM,CAAA;AAErB,8BAA8B;AACvB,MAAM,kBAAkB,GAAG,CAAC,MAAsB,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;CAC/C,CAAC,CAAA;AAFW,QAAA,kBAAkB,sBAE7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levrbet/shared",
3
- "version": "0.2.16",
3
+ "version": "0.2.17",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "exports": {