apitally 0.18.0 → 0.19.0

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.
Files changed (179) hide show
  1. package/dist/adonisjs/configure.cjs +2 -2
  2. package/dist/adonisjs/configure.cjs.map +1 -1
  3. package/dist/adonisjs/configure.js.map +1 -1
  4. package/dist/adonisjs/index.cjs +2 -2
  5. package/dist/adonisjs/index.cjs.map +1 -1
  6. package/dist/adonisjs/index.d.cts +2 -2
  7. package/dist/adonisjs/index.d.ts +2 -2
  8. package/dist/adonisjs/index.js.map +1 -1
  9. package/dist/adonisjs/middleware.cjs +104 -84
  10. package/dist/adonisjs/middleware.cjs.map +1 -1
  11. package/dist/adonisjs/middleware.d.cts +2 -2
  12. package/dist/adonisjs/middleware.d.ts +2 -2
  13. package/dist/adonisjs/middleware.js +103 -83
  14. package/dist/adonisjs/middleware.js.map +1 -1
  15. package/dist/adonisjs/provider.cjs +4750 -60
  16. package/dist/adonisjs/provider.cjs.map +1 -1
  17. package/dist/adonisjs/provider.d.cts +7 -4
  18. package/dist/adonisjs/provider.d.ts +7 -4
  19. package/dist/adonisjs/provider.js +4728 -15
  20. package/dist/adonisjs/provider.js.map +1 -1
  21. package/dist/common/client.cjs +62 -40
  22. package/dist/common/client.cjs.map +1 -1
  23. package/dist/common/client.d.cts +2 -2
  24. package/dist/common/client.d.ts +2 -2
  25. package/dist/common/client.js +31 -9
  26. package/dist/common/client.js.map +1 -1
  27. package/dist/common/consumerRegistry.d.cts +2 -2
  28. package/dist/common/consumerRegistry.d.ts +2 -2
  29. package/dist/common/headers.cjs.map +1 -1
  30. package/dist/common/headers.d.cts +1 -1
  31. package/dist/common/headers.d.ts +1 -1
  32. package/dist/common/headers.js.map +1 -1
  33. package/dist/common/logging.cjs +3 -2
  34. package/dist/common/logging.cjs.map +1 -1
  35. package/dist/common/logging.d.cts +1 -1
  36. package/dist/common/logging.d.ts +1 -1
  37. package/dist/common/logging.js +3 -2
  38. package/dist/common/logging.js.map +1 -1
  39. package/dist/common/packageVersions.cjs +2 -2
  40. package/dist/common/packageVersions.cjs.map +1 -1
  41. package/dist/common/packageVersions.js.map +1 -1
  42. package/dist/common/requestCounter.d.cts +2 -2
  43. package/dist/common/requestCounter.d.ts +2 -2
  44. package/dist/common/requestLogger.cjs +54 -33
  45. package/dist/common/requestLogger.cjs.map +1 -1
  46. package/dist/common/requestLogger.d.cts +11 -4
  47. package/dist/common/requestLogger.d.ts +11 -4
  48. package/dist/common/requestLogger.js +27 -6
  49. package/dist/common/requestLogger.js.map +1 -1
  50. package/dist/common/serverErrorCounter.cjs +3 -2
  51. package/dist/common/serverErrorCounter.cjs.map +1 -1
  52. package/dist/common/serverErrorCounter.d.cts +2 -2
  53. package/dist/common/serverErrorCounter.d.ts +2 -2
  54. package/dist/common/serverErrorCounter.js +1 -0
  55. package/dist/common/serverErrorCounter.js.map +1 -1
  56. package/dist/common/tempGzipFile.cjs +15 -14
  57. package/dist/common/tempGzipFile.cjs.map +1 -1
  58. package/dist/common/tempGzipFile.d.cts +1 -1
  59. package/dist/common/tempGzipFile.d.ts +1 -1
  60. package/dist/common/tempGzipFile.js +3 -2
  61. package/dist/common/tempGzipFile.js.map +1 -1
  62. package/dist/common/types.d.cts +2 -2
  63. package/dist/common/types.d.ts +2 -2
  64. package/dist/common/validationErrorCounter.cjs +2 -2
  65. package/dist/common/validationErrorCounter.cjs.map +1 -1
  66. package/dist/common/validationErrorCounter.d.cts +2 -2
  67. package/dist/common/validationErrorCounter.d.ts +2 -2
  68. package/dist/common/validationErrorCounter.js.map +1 -1
  69. package/dist/express/index.cjs +4979 -167
  70. package/dist/express/index.cjs.map +1 -1
  71. package/dist/express/index.d.cts +2 -2
  72. package/dist/express/index.d.ts +2 -2
  73. package/dist/express/index.js +4951 -118
  74. package/dist/express/index.js.map +1 -1
  75. package/dist/express/middleware.cjs +4979 -167
  76. package/dist/express/middleware.cjs.map +1 -1
  77. package/dist/express/middleware.d.cts +2 -2
  78. package/dist/express/middleware.d.ts +2 -2
  79. package/dist/express/middleware.js +4951 -118
  80. package/dist/express/middleware.js.map +1 -1
  81. package/dist/fastify/index.cjs +4908 -70
  82. package/dist/fastify/index.cjs.map +1 -1
  83. package/dist/fastify/index.d.cts +3 -2
  84. package/dist/fastify/index.d.ts +3 -2
  85. package/dist/fastify/index.js +4881 -22
  86. package/dist/fastify/index.js.map +1 -1
  87. package/dist/fastify/plugin.cjs +4908 -70
  88. package/dist/fastify/plugin.cjs.map +1 -1
  89. package/dist/fastify/plugin.d.cts +8 -3
  90. package/dist/fastify/plugin.d.ts +8 -3
  91. package/dist/fastify/plugin.js +4881 -22
  92. package/dist/fastify/plugin.js.map +1 -1
  93. package/dist/h3/index.cjs +219 -50
  94. package/dist/h3/index.cjs.map +1 -1
  95. package/dist/h3/index.d.cts +2 -2
  96. package/dist/h3/index.d.ts +2 -2
  97. package/dist/h3/index.js +184 -15
  98. package/dist/h3/index.js.map +1 -1
  99. package/dist/h3/plugin.cjs +219 -50
  100. package/dist/h3/plugin.cjs.map +1 -1
  101. package/dist/h3/plugin.d.cts +6 -4
  102. package/dist/h3/plugin.d.ts +6 -4
  103. package/dist/h3/plugin.js +184 -15
  104. package/dist/h3/plugin.js.map +1 -1
  105. package/dist/h3/utils.cjs +2 -2
  106. package/dist/h3/utils.cjs.map +1 -1
  107. package/dist/h3/utils.js.map +1 -1
  108. package/dist/hono/index.cjs +278 -110
  109. package/dist/hono/index.cjs.map +1 -1
  110. package/dist/hono/index.d.cts +2 -2
  111. package/dist/hono/index.d.ts +2 -2
  112. package/dist/hono/index.js +244 -76
  113. package/dist/hono/index.js.map +1 -1
  114. package/dist/hono/middleware.cjs +278 -110
  115. package/dist/hono/middleware.cjs.map +1 -1
  116. package/dist/hono/middleware.d.cts +2 -2
  117. package/dist/hono/middleware.d.ts +2 -2
  118. package/dist/hono/middleware.js +244 -76
  119. package/dist/hono/middleware.js.map +1 -1
  120. package/dist/hono/utils.cjs +2 -2
  121. package/dist/hono/utils.cjs.map +1 -1
  122. package/dist/hono/utils.d.cts +2 -2
  123. package/dist/hono/utils.d.ts +2 -2
  124. package/dist/hono/utils.js.map +1 -1
  125. package/dist/koa/index.cjs +275 -105
  126. package/dist/koa/index.cjs.map +1 -1
  127. package/dist/koa/index.d.cts +2 -2
  128. package/dist/koa/index.d.ts +2 -2
  129. package/dist/koa/index.js +239 -69
  130. package/dist/koa/index.js.map +1 -1
  131. package/dist/koa/middleware.cjs +273 -105
  132. package/dist/koa/middleware.cjs.map +1 -1
  133. package/dist/koa/middleware.d.cts +2 -2
  134. package/dist/koa/middleware.d.ts +2 -2
  135. package/dist/koa/middleware.js +239 -69
  136. package/dist/koa/middleware.js.map +1 -1
  137. package/dist/loggers/console.cjs +69 -0
  138. package/dist/loggers/console.cjs.map +1 -0
  139. package/dist/loggers/console.d.cts +9 -0
  140. package/dist/loggers/console.d.ts +9 -0
  141. package/dist/loggers/console.js +46 -0
  142. package/dist/loggers/console.js.map +1 -0
  143. package/dist/loggers/index.cjs +4824 -0
  144. package/dist/loggers/index.cjs.map +1 -0
  145. package/dist/loggers/index.d.cts +9 -0
  146. package/dist/loggers/index.d.ts +9 -0
  147. package/dist/loggers/index.js +4813 -0
  148. package/dist/loggers/index.js.map +1 -0
  149. package/dist/loggers/nestjs.cjs +135 -0
  150. package/dist/loggers/nestjs.cjs.map +1 -0
  151. package/dist/loggers/nestjs.d.cts +9 -0
  152. package/dist/loggers/nestjs.d.ts +9 -0
  153. package/dist/loggers/nestjs.js +100 -0
  154. package/dist/loggers/nestjs.js.map +1 -0
  155. package/dist/loggers/pino.cjs +4656 -0
  156. package/dist/loggers/pino.cjs.map +1 -0
  157. package/dist/loggers/pino.d.cts +9 -0
  158. package/dist/loggers/pino.d.ts +9 -0
  159. package/dist/loggers/pino.js +4648 -0
  160. package/dist/loggers/pino.js.map +1 -0
  161. package/dist/loggers/utils.cjs +66 -0
  162. package/dist/loggers/utils.cjs.map +1 -0
  163. package/dist/loggers/utils.d.cts +6 -0
  164. package/dist/loggers/utils.d.ts +6 -0
  165. package/dist/loggers/utils.js +42 -0
  166. package/dist/loggers/utils.js.map +1 -0
  167. package/dist/loggers/winston.cjs +135 -0
  168. package/dist/loggers/winston.cjs.map +1 -0
  169. package/dist/loggers/winston.d.cts +9 -0
  170. package/dist/loggers/winston.d.ts +9 -0
  171. package/dist/loggers/winston.js +100 -0
  172. package/dist/loggers/winston.js.map +1 -0
  173. package/dist/nestjs/index.cjs +5341 -451
  174. package/dist/nestjs/index.cjs.map +1 -1
  175. package/dist/nestjs/index.d.cts +2 -2
  176. package/dist/nestjs/index.d.ts +2 -2
  177. package/dist/nestjs/index.js +5294 -406
  178. package/dist/nestjs/index.js.map +1 -1
  179. package/package.json +4 -3
@@ -39,11 +39,12 @@ __export(hono_exports, {
39
39
  module.exports = __toCommonJS(hono_exports);
40
40
 
41
41
  // src/hono/middleware.ts
42
- var import_perf_hooks = require("perf_hooks");
42
+ var import_node_async_hooks = require("async_hooks");
43
+ var import_node_perf_hooks = require("perf_hooks");
43
44
 
44
45
  // src/common/client.ts
45
- var import_crypto5 = require("crypto");
46
46
  var import_fetch_retry = __toESM(require("fetch-retry"), 1);
47
+ var import_node_crypto5 = require("crypto");
47
48
 
48
49
  // src/common/consumerRegistry.ts
49
50
  var consumerFromStringOrObject = /* @__PURE__ */ __name((consumer) => {
@@ -103,7 +104,7 @@ var ConsumerRegistry = _ConsumerRegistry;
103
104
 
104
105
  // src/common/logging.ts
105
106
  var import_winston = require("winston");
106
- var getLogger = /* @__PURE__ */ __name(() => {
107
+ function getLogger() {
107
108
  return (0, import_winston.createLogger)({
108
109
  level: process.env.APITALLY_DEBUG ? "debug" : "warn",
109
110
  format: import_winston.format.combine(import_winston.format.colorize(), import_winston.format.timestamp(), import_winston.format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)),
@@ -111,7 +112,8 @@ var getLogger = /* @__PURE__ */ __name(() => {
111
112
  new import_winston.transports.Console()
112
113
  ]
113
114
  });
114
- }, "getLogger");
115
+ }
116
+ __name(getLogger, "getLogger");
115
117
 
116
118
  // src/common/paramValidation.ts
117
119
  function isValidClientId(clientId) {
@@ -213,11 +215,11 @@ var RequestCounter = _RequestCounter;
213
215
 
214
216
  // src/common/requestLogger.ts
215
217
  var import_async_lock = __toESM(require("async-lock"), 1);
216
- var import_buffer2 = require("buffer");
217
- var import_crypto3 = require("crypto");
218
- var import_fs2 = require("fs");
219
- var import_os2 = require("os");
220
- var import_path2 = require("path");
218
+ var import_node_buffer2 = require("buffer");
219
+ var import_node_crypto3 = require("crypto");
220
+ var import_node_fs2 = require("fs");
221
+ var import_node_os2 = require("os");
222
+ var import_node_path2 = require("path");
221
223
 
222
224
  // src/common/sentry.ts
223
225
  var sentry;
@@ -236,7 +238,7 @@ function getSentryEventId() {
236
238
  __name(getSentryEventId, "getSentryEventId");
237
239
 
238
240
  // src/common/serverErrorCounter.ts
239
- var import_crypto = require("crypto");
241
+ var import_node_crypto = require("crypto");
240
242
  var MAX_MSG_LENGTH = 2048;
241
243
  var MAX_STACKTRACE_LENGTH = 65536;
242
244
  var _ServerErrorCounter = class _ServerErrorCounter {
@@ -278,6 +280,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
278
280
  });
279
281
  this.errorCounts.clear();
280
282
  this.errorDetails.clear();
283
+ this.sentryEventIds.clear();
281
284
  return data;
282
285
  }
283
286
  getKey(serverError) {
@@ -289,7 +292,7 @@ var _ServerErrorCounter = class _ServerErrorCounter {
289
292
  serverError.msg.trim(),
290
293
  serverError.traceback.trim()
291
294
  ].join("|");
292
- return (0, import_crypto.createHash)("md5").update(hashInput).digest("hex");
295
+ return (0, import_node_crypto.createHash)("md5").update(hashInput).digest("hex");
293
296
  }
294
297
  };
295
298
  __name(_ServerErrorCounter, "ServerErrorCounter");
@@ -322,12 +325,13 @@ function truncateExceptionStackTrace(stack) {
322
325
  __name(truncateExceptionStackTrace, "truncateExceptionStackTrace");
323
326
 
324
327
  // src/common/tempGzipFile.ts
325
- var import_buffer = require("buffer");
326
- var import_crypto2 = require("crypto");
327
- var import_fs = require("fs");
328
- var import_os = require("os");
329
- var import_path = require("path");
330
- var import_zlib = require("zlib");
328
+ var import_node_buffer = require("buffer");
329
+ var import_node_crypto2 = require("crypto");
330
+ var import_node_fs = require("fs");
331
+ var import_promises = require("fs/promises");
332
+ var import_node_os = require("os");
333
+ var import_node_path = require("path");
334
+ var import_node_zlib = require("zlib");
331
335
  var _TempGzipFile = class _TempGzipFile {
332
336
  uuid;
333
337
  filePath;
@@ -336,9 +340,9 @@ var _TempGzipFile = class _TempGzipFile {
336
340
  readyPromise;
337
341
  closedPromise;
338
342
  constructor() {
339
- this.uuid = (0, import_crypto2.randomUUID)();
340
- this.filePath = (0, import_path.join)((0, import_os.tmpdir)(), `apitally-${this.uuid}.gz`);
341
- this.writeStream = (0, import_fs.createWriteStream)(this.filePath);
343
+ this.uuid = (0, import_node_crypto2.randomUUID)();
344
+ this.filePath = (0, import_node_path.join)((0, import_node_os.tmpdir)(), `apitally-${this.uuid}.gz`);
345
+ this.writeStream = (0, import_node_fs.createWriteStream)(this.filePath);
342
346
  this.readyPromise = new Promise((resolve, reject) => {
343
347
  this.writeStream.once("ready", resolve);
344
348
  this.writeStream.once("error", reject);
@@ -347,7 +351,7 @@ var _TempGzipFile = class _TempGzipFile {
347
351
  this.writeStream.once("close", resolve);
348
352
  this.writeStream.once("error", reject);
349
353
  });
350
- this.gzip = (0, import_zlib.createGzip)();
354
+ this.gzip = (0, import_node_zlib.createGzip)();
351
355
  this.gzip.pipe(this.writeStream);
352
356
  }
353
357
  get size() {
@@ -356,9 +360,9 @@ var _TempGzipFile = class _TempGzipFile {
356
360
  async writeLine(data) {
357
361
  await this.readyPromise;
358
362
  return new Promise((resolve, reject) => {
359
- this.gzip.write(import_buffer.Buffer.concat([
363
+ this.gzip.write(import_node_buffer.Buffer.concat([
360
364
  data,
361
- import_buffer.Buffer.from("\n")
365
+ import_node_buffer.Buffer.from("\n")
362
366
  ]), (error) => {
363
367
  if (error) {
364
368
  reject(error);
@@ -370,7 +374,7 @@ var _TempGzipFile = class _TempGzipFile {
370
374
  }
371
375
  async getContent() {
372
376
  return new Promise((resolve, reject) => {
373
- (0, import_fs.readFile)(this.filePath, (error, data) => {
377
+ (0, import_node_fs.readFile)(this.filePath, (error, data) => {
374
378
  if (error) {
375
379
  reject(error);
376
380
  } else {
@@ -389,7 +393,7 @@ var _TempGzipFile = class _TempGzipFile {
389
393
  }
390
394
  async delete() {
391
395
  await this.close();
392
- (0, import_fs.unlinkSync)(this.filePath);
396
+ await (0, import_promises.unlink)(this.filePath);
393
397
  }
394
398
  };
395
399
  __name(_TempGzipFile, "TempGzipFile");
@@ -400,8 +404,9 @@ var MAX_BODY_SIZE = 5e4;
400
404
  var MAX_FILE_SIZE = 1e6;
401
405
  var MAX_FILES = 50;
402
406
  var MAX_PENDING_WRITES = 100;
403
- var BODY_TOO_LARGE = import_buffer2.Buffer.from("<body too large>");
404
- var BODY_MASKED = import_buffer2.Buffer.from("<masked>");
407
+ var MAX_LOG_MSG_LENGTH = 2048;
408
+ var BODY_TOO_LARGE = import_node_buffer2.Buffer.from("<body too large>");
409
+ var BODY_MASKED = import_node_buffer2.Buffer.from("<masked>");
405
410
  var MASKED = "******";
406
411
  var ALLOWED_CONTENT_TYPES = [
407
412
  "application/json",
@@ -456,6 +461,7 @@ var DEFAULT_CONFIG = {
456
461
  logResponseHeaders: true,
457
462
  logResponseBody: false,
458
463
  logException: true,
464
+ captureLogs: false,
459
465
  maskQueryParams: [],
460
466
  maskHeaders: [],
461
467
  maskBodyFields: [],
@@ -598,7 +604,7 @@ var _RequestLogger = class _RequestLogger {
598
604
  try {
599
605
  const parsedBody = JSON.parse(bodyData.toString());
600
606
  const maskedBody = this.maskBody(parsedBody);
601
- item[key].body = import_buffer2.Buffer.from(JSON.stringify(maskedBody));
607
+ item[key].body = import_node_buffer2.Buffer.from(JSON.stringify(maskedBody));
602
608
  } catch {
603
609
  }
604
610
  }
@@ -610,7 +616,7 @@ var _RequestLogger = class _RequestLogger {
610
616
  item.request.url = url.toString();
611
617
  return item;
612
618
  }
613
- logRequest(request, response, error) {
619
+ logRequest(request, response, error, logs) {
614
620
  var _a2, _b, _c;
615
621
  if (!this.enabled || this.suspendUntil !== null) return;
616
622
  const url = new URL(request.url);
@@ -632,7 +638,7 @@ var _RequestLogger = class _RequestLogger {
632
638
  response.size = void 0;
633
639
  }
634
640
  const item = {
635
- uuid: (0, import_crypto3.randomUUID)(),
641
+ uuid: (0, import_node_crypto3.randomUUID)(),
636
642
  request,
637
643
  response,
638
644
  exception: error && this.config.logException ? {
@@ -642,6 +648,14 @@ var _RequestLogger = class _RequestLogger {
642
648
  sentryEventId: getSentryEventId()
643
649
  } : void 0
644
650
  };
651
+ if (logs && logs.length > 0) {
652
+ item.logs = logs.map((log) => ({
653
+ timestamp: log.timestamp,
654
+ logger: log.logger,
655
+ level: log.level,
656
+ message: truncateLogMessage(log.message)
657
+ }));
658
+ }
645
659
  this.pendingWrites.push(item);
646
660
  if (this.pendingWrites.length > MAX_PENDING_WRITES) {
647
661
  this.pendingWrites.shift();
@@ -663,7 +677,8 @@ var _RequestLogger = class _RequestLogger {
663
677
  uuid: item.uuid,
664
678
  request: skipEmptyValues(item.request),
665
679
  response: skipEmptyValues(item.response),
666
- exception: item.exception
680
+ exception: item.exception,
681
+ logs: item.logs
667
682
  };
668
683
  [
669
684
  finalItem.request.body,
@@ -675,7 +690,7 @@ var _RequestLogger = class _RequestLogger {
675
690
  };
676
691
  }
677
692
  });
678
- await this.currentFile.writeLine(import_buffer2.Buffer.from(JSON.stringify(finalItem)));
693
+ await this.currentFile.writeLine(import_node_buffer2.Buffer.from(JSON.stringify(finalItem)));
679
694
  }
680
695
  }
681
696
  });
@@ -758,18 +773,26 @@ __name(matchPatterns, "matchPatterns");
758
773
  function skipEmptyValues(data) {
759
774
  return Object.fromEntries(Object.entries(data).filter(([_, v]) => {
760
775
  if (v == null || Number.isNaN(v)) return false;
761
- if (Array.isArray(v) || import_buffer2.Buffer.isBuffer(v) || typeof v === "string") {
776
+ if (Array.isArray(v) || import_node_buffer2.Buffer.isBuffer(v) || typeof v === "string") {
762
777
  return v.length > 0;
763
778
  }
764
779
  return true;
765
780
  }));
766
781
  }
767
782
  __name(skipEmptyValues, "skipEmptyValues");
783
+ function truncateLogMessage(msg) {
784
+ if (msg.length > MAX_LOG_MSG_LENGTH) {
785
+ const suffix = "... (truncated)";
786
+ return msg.slice(0, MAX_LOG_MSG_LENGTH - suffix.length) + suffix;
787
+ }
788
+ return msg;
789
+ }
790
+ __name(truncateLogMessage, "truncateLogMessage");
768
791
  function checkWritableFs() {
769
792
  try {
770
- const testPath = (0, import_path2.join)((0, import_os2.tmpdir)(), `apitally-${(0, import_crypto3.randomUUID)()}`);
771
- (0, import_fs2.writeFileSync)(testPath, "test");
772
- (0, import_fs2.unlinkSync)(testPath);
793
+ const testPath = (0, import_node_path2.join)((0, import_node_os2.tmpdir)(), `apitally-${(0, import_node_crypto3.randomUUID)()}`);
794
+ (0, import_node_fs2.writeFileSync)(testPath, "test");
795
+ (0, import_node_fs2.unlinkSync)(testPath);
773
796
  return true;
774
797
  } catch (error) {
775
798
  return false;
@@ -778,7 +801,7 @@ function checkWritableFs() {
778
801
  __name(checkWritableFs, "checkWritableFs");
779
802
 
780
803
  // src/common/validationErrorCounter.ts
781
- var import_crypto4 = require("crypto");
804
+ var import_node_crypto4 = require("crypto");
782
805
  var _ValidationErrorCounter = class _ValidationErrorCounter {
783
806
  errorCounts;
784
807
  errorDetails;
@@ -822,7 +845,7 @@ var _ValidationErrorCounter = class _ValidationErrorCounter {
822
845
  validationError.msg.trim(),
823
846
  validationError.type
824
847
  ].join("|");
825
- return (0, import_crypto4.createHash)("md5").update(hashInput).digest("hex");
848
+ return (0, import_node_crypto4.createHash)("md5").update(hashInput).digest("hex");
826
849
  }
827
850
  };
828
851
  __name(_ValidationErrorCounter, "ValidationErrorCounter");
@@ -873,7 +896,7 @@ var _ApitallyClient = class _ApitallyClient {
873
896
  _ApitallyClient.instance = this;
874
897
  this.clientId = clientId;
875
898
  this.env = env;
876
- this.instanceUuid = (0, import_crypto5.randomUUID)();
899
+ this.instanceUuid = (0, import_node_crypto5.randomUUID)();
877
900
  this.syncDataQueue = [];
878
901
  this.requestCounter = new RequestCounter();
879
902
  this.requestLogger = new RequestLogger(requestLogging ?? requestLoggingConfig);
@@ -979,7 +1002,7 @@ var _ApitallyClient = class _ApitallyClient {
979
1002
  this.logger.debug("Sending startup data to Apitally Hub");
980
1003
  const payload = {
981
1004
  instance_uuid: this.instanceUuid,
982
- message_uuid: (0, import_crypto5.randomUUID)(),
1005
+ message_uuid: (0, import_node_crypto5.randomUUID)(),
983
1006
  ...this.startupData
984
1007
  };
985
1008
  try {
@@ -1001,7 +1024,7 @@ var _ApitallyClient = class _ApitallyClient {
1001
1024
  const newPayload = {
1002
1025
  timestamp: Date.now() / 1e3,
1003
1026
  instance_uuid: this.instanceUuid,
1004
- message_uuid: (0, import_crypto5.randomUUID)(),
1027
+ message_uuid: (0, import_node_crypto5.randomUUID)(),
1005
1028
  requests: this.requestCounter.getAndResetRequests(),
1006
1029
  validation_errors: this.validationErrorCounter.getAndResetValidationErrors(),
1007
1030
  server_errors: this.serverErrorCounter.getAndResetServerErrors(),
@@ -1193,11 +1216,148 @@ async function teeResponse(response) {
1193
1216
  }
1194
1217
  __name(teeResponse, "teeResponse");
1195
1218
 
1219
+ // src/loggers/console.ts
1220
+ var import_node_util = require("util");
1221
+ var MAX_BUFFER_SIZE = 1e3;
1222
+ var isPatched = false;
1223
+ var globalLogsContext;
1224
+ function patchConsole(logsContext) {
1225
+ globalLogsContext = logsContext;
1226
+ if (isPatched) {
1227
+ return;
1228
+ }
1229
+ const logMethods = [
1230
+ "log",
1231
+ "warn",
1232
+ "error",
1233
+ "info",
1234
+ "debug"
1235
+ ];
1236
+ logMethods.forEach((method) => {
1237
+ const originalMethod = console[method];
1238
+ console[method] = function(...args) {
1239
+ captureLog(method, args);
1240
+ return originalMethod.apply(console, args);
1241
+ };
1242
+ });
1243
+ isPatched = true;
1244
+ }
1245
+ __name(patchConsole, "patchConsole");
1246
+ function captureLog(level, args) {
1247
+ const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
1248
+ if (logs && logs.length < MAX_BUFFER_SIZE) {
1249
+ logs.push({
1250
+ timestamp: Date.now() / 1e3,
1251
+ logger: "console",
1252
+ level,
1253
+ message: (0, import_node_util.format)(...args)
1254
+ });
1255
+ }
1256
+ }
1257
+ __name(captureLog, "captureLog");
1258
+
1259
+ // src/loggers/utils.ts
1260
+ var import_node_util2 = require("util");
1261
+ function formatMessage(message, ...args) {
1262
+ return [
1263
+ message,
1264
+ ...args
1265
+ ].map(formatArg).filter((arg) => arg !== "").join("\n");
1266
+ }
1267
+ __name(formatMessage, "formatMessage");
1268
+ function removeKeys(obj, keys) {
1269
+ return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
1270
+ }
1271
+ __name(removeKeys, "removeKeys");
1272
+ function formatArg(arg) {
1273
+ if (typeof arg === "string") {
1274
+ return arg.trim();
1275
+ }
1276
+ if (arg instanceof Error) {
1277
+ return (0, import_node_util2.format)(arg).trim();
1278
+ }
1279
+ if (arg === void 0 || arg === null || isEmptyObject(arg)) {
1280
+ return "";
1281
+ }
1282
+ try {
1283
+ return JSON.stringify(arg);
1284
+ } catch {
1285
+ return (0, import_node_util2.format)(arg).trim();
1286
+ }
1287
+ }
1288
+ __name(formatArg, "formatArg");
1289
+ function isEmptyObject(obj) {
1290
+ return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
1291
+ }
1292
+ __name(isEmptyObject, "isEmptyObject");
1293
+
1294
+ // src/loggers/pino.ts
1295
+ var originalStreamSym = Symbol.for("apitally.originalStream");
1296
+
1297
+ // src/loggers/winston.ts
1298
+ var MAX_BUFFER_SIZE2 = 1e3;
1299
+ var isPatched2 = false;
1300
+ var globalLogsContext2;
1301
+ async function patchWinston(logsContext) {
1302
+ var _a2, _b;
1303
+ globalLogsContext2 = logsContext;
1304
+ if (isPatched2) {
1305
+ return;
1306
+ }
1307
+ try {
1308
+ const loggerModule = await import("winston/lib/winston/logger.js");
1309
+ if ((_b = (_a2 = loggerModule.default) == null ? void 0 : _a2.prototype) == null ? void 0 : _b.write) {
1310
+ const originalWrite = loggerModule.default.prototype.write;
1311
+ loggerModule.default.prototype.write = function(info) {
1312
+ captureLog2(info);
1313
+ return originalWrite.call(this, info);
1314
+ };
1315
+ }
1316
+ } catch {
1317
+ }
1318
+ isPatched2 = true;
1319
+ }
1320
+ __name(patchWinston, "patchWinston");
1321
+ function captureLog2(info) {
1322
+ const logs = globalLogsContext2 == null ? void 0 : globalLogsContext2.getStore();
1323
+ if (!logs || !info || logs.length >= MAX_BUFFER_SIZE2) {
1324
+ return;
1325
+ }
1326
+ try {
1327
+ const rest = removeKeys(info, [
1328
+ "timestamp",
1329
+ "level",
1330
+ "message",
1331
+ "splat"
1332
+ ]);
1333
+ const formattedMessage = formatMessage(info.message, rest);
1334
+ if (formattedMessage) {
1335
+ logs.push({
1336
+ timestamp: parseTimestamp(info.timestamp),
1337
+ level: info.level || "info",
1338
+ message: formattedMessage.trim()
1339
+ });
1340
+ }
1341
+ } catch (e) {
1342
+ }
1343
+ }
1344
+ __name(captureLog2, "captureLog");
1345
+ function parseTimestamp(timestamp) {
1346
+ if (timestamp) {
1347
+ const ts = new Date(timestamp).getTime();
1348
+ if (!isNaN(ts)) {
1349
+ return ts / 1e3;
1350
+ }
1351
+ }
1352
+ return Date.now() / 1e3;
1353
+ }
1354
+ __name(parseTimestamp, "parseTimestamp");
1355
+
1196
1356
  // src/hono/utils.ts
1197
1357
  var import_handler = require("hono/utils/handler");
1198
1358
 
1199
1359
  // src/common/packageVersions.ts
1200
- var import_module = require("module");
1360
+ var import_node_module = require("module");
1201
1361
  var import_meta = {};
1202
1362
  function getPackageVersion(name) {
1203
1363
  const packageJsonPath = `${name}/package.json`;
@@ -1205,7 +1365,7 @@ function getPackageVersion(name) {
1205
1365
  return require(packageJsonPath).version || null;
1206
1366
  } catch (error) {
1207
1367
  try {
1208
- const _require = (0, import_module.createRequire)(import_meta.url);
1368
+ const _require = (0, import_node_module.createRequire)(import_meta.url);
1209
1369
  return _require(packageJsonPath).version || null;
1210
1370
  } catch (error2) {
1211
1371
  return null;
@@ -1307,84 +1467,92 @@ function useApitally(app, config) {
1307
1467
  }
1308
1468
  __name(useApitally, "useApitally");
1309
1469
  function getMiddleware(client) {
1470
+ const logsContext = new import_node_async_hooks.AsyncLocalStorage();
1471
+ if (client.requestLogger.config.captureLogs) {
1472
+ patchConsole(logsContext);
1473
+ patchWinston(logsContext);
1474
+ }
1310
1475
  return async (c, next) => {
1311
1476
  if (!client.isEnabled() || c.req.method.toUpperCase() === "OPTIONS") {
1312
1477
  await next();
1313
1478
  return;
1314
1479
  }
1315
- const timestamp = Date.now() / 1e3;
1316
- const startTime = import_perf_hooks.performance.now();
1317
- await next();
1318
- let response;
1319
- const responseTime = import_perf_hooks.performance.now() - startTime;
1320
- const [responseSize, newResponse] = await measureResponseSize(c.res);
1321
- const requestSize = parseContentLength(c.req.header("content-length"));
1322
- const consumer = getConsumer(c);
1323
- client.consumerRegistry.addOrUpdateConsumer(consumer);
1324
- client.requestCounter.addRequest({
1325
- consumer: consumer == null ? void 0 : consumer.identifier,
1326
- method: c.req.method,
1327
- path: c.req.routePath,
1328
- statusCode: c.res.status,
1329
- responseTime,
1330
- requestSize,
1331
- responseSize
1332
- });
1333
- response = newResponse;
1334
- if (c.res.status === 400) {
1335
- const [responseJson, newResponse2] = await getResponseJson(response);
1336
- const validationErrors = extractZodErrors(responseJson);
1337
- validationErrors.forEach((error) => {
1338
- client.validationErrorCounter.addValidationError({
1339
- consumer: consumer == null ? void 0 : consumer.identifier,
1340
- method: c.req.method,
1341
- path: c.req.routePath,
1342
- ...error
1343
- });
1344
- });
1345
- response = newResponse2;
1346
- }
1347
- if (c.error) {
1348
- client.serverErrorCounter.addServerError({
1480
+ await logsContext.run([], async () => {
1481
+ const timestamp = Date.now() / 1e3;
1482
+ const startTime = import_node_perf_hooks.performance.now();
1483
+ await next();
1484
+ let response;
1485
+ const responseTime = import_node_perf_hooks.performance.now() - startTime;
1486
+ const [responseSize, newResponse] = await measureResponseSize(c.res);
1487
+ const requestSize = parseContentLength(c.req.header("content-length"));
1488
+ const consumer = getConsumer(c);
1489
+ client.consumerRegistry.addOrUpdateConsumer(consumer);
1490
+ client.requestCounter.addRequest({
1349
1491
  consumer: consumer == null ? void 0 : consumer.identifier,
1350
1492
  method: c.req.method,
1351
1493
  path: c.req.routePath,
1352
- type: c.error.name,
1353
- msg: c.error.message,
1354
- traceback: c.error.stack || ""
1494
+ statusCode: c.res.status,
1495
+ responseTime,
1496
+ requestSize,
1497
+ responseSize
1355
1498
  });
1356
- }
1357
- if (client.requestLogger.enabled) {
1358
- let requestBody;
1359
- let responseBody;
1360
- let newResponse2 = response;
1361
- const requestContentType = c.req.header("content-type");
1362
- const responseContentType = c.res.headers.get("content-type");
1363
- if (client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType)) {
1364
- requestBody = Buffer.from(await c.req.arrayBuffer());
1365
- }
1366
- if (client.requestLogger.config.logResponseBody && client.requestLogger.isSupportedContentType(responseContentType)) {
1367
- [responseBody, newResponse2] = await getResponseBody(response);
1499
+ response = newResponse;
1500
+ if (c.res.status === 400) {
1501
+ const [responseJson, newResponse2] = await getResponseJson(response);
1502
+ const validationErrors = extractZodErrors(responseJson);
1503
+ validationErrors.forEach((error) => {
1504
+ client.validationErrorCounter.addValidationError({
1505
+ consumer: consumer == null ? void 0 : consumer.identifier,
1506
+ method: c.req.method,
1507
+ path: c.req.routePath,
1508
+ ...error
1509
+ });
1510
+ });
1368
1511
  response = newResponse2;
1369
1512
  }
1370
- client.requestLogger.logRequest({
1371
- timestamp,
1372
- method: c.req.method,
1373
- path: c.req.routePath,
1374
- url: c.req.url,
1375
- headers: convertHeaders(c.req.header()),
1376
- size: Number(requestSize),
1377
- consumer: consumer == null ? void 0 : consumer.identifier,
1378
- body: requestBody
1379
- }, {
1380
- statusCode: c.res.status,
1381
- responseTime: responseTime / 1e3,
1382
- headers: convertHeaders(c.res.headers),
1383
- size: responseSize,
1384
- body: responseBody
1385
- }, c.error);
1386
- }
1387
- c.res = response;
1513
+ if (c.error) {
1514
+ client.serverErrorCounter.addServerError({
1515
+ consumer: consumer == null ? void 0 : consumer.identifier,
1516
+ method: c.req.method,
1517
+ path: c.req.routePath,
1518
+ type: c.error.name,
1519
+ msg: c.error.message,
1520
+ traceback: c.error.stack || ""
1521
+ });
1522
+ }
1523
+ if (client.requestLogger.enabled) {
1524
+ let requestBody;
1525
+ let responseBody;
1526
+ let newResponse2 = response;
1527
+ const requestContentType = c.req.header("content-type");
1528
+ const responseContentType = c.res.headers.get("content-type");
1529
+ if (client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType)) {
1530
+ requestBody = Buffer.from(await c.req.arrayBuffer());
1531
+ }
1532
+ if (client.requestLogger.config.logResponseBody && client.requestLogger.isSupportedContentType(responseContentType)) {
1533
+ [responseBody, newResponse2] = await getResponseBody(response);
1534
+ response = newResponse2;
1535
+ }
1536
+ const logs = logsContext.getStore();
1537
+ client.requestLogger.logRequest({
1538
+ timestamp,
1539
+ method: c.req.method,
1540
+ path: c.req.routePath,
1541
+ url: c.req.url,
1542
+ headers: convertHeaders(c.req.header()),
1543
+ size: requestSize,
1544
+ consumer: consumer == null ? void 0 : consumer.identifier,
1545
+ body: requestBody
1546
+ }, {
1547
+ statusCode: c.res.status,
1548
+ responseTime: responseTime / 1e3,
1549
+ headers: convertHeaders(c.res.headers),
1550
+ size: responseSize,
1551
+ body: responseBody
1552
+ }, c.error, logs);
1553
+ }
1554
+ c.res = response;
1555
+ });
1388
1556
  };
1389
1557
  }
1390
1558
  __name(getMiddleware, "getMiddleware");