apitally 0.12.0 → 0.14.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 (95) hide show
  1. package/README.md +47 -10
  2. package/dist/adonisjs/index.cjs +41 -0
  3. package/dist/adonisjs/index.cjs.map +1 -0
  4. package/dist/adonisjs/index.d.cts +14 -0
  5. package/dist/adonisjs/index.d.ts +14 -0
  6. package/dist/adonisjs/index.js +17 -0
  7. package/dist/adonisjs/index.js.map +1 -0
  8. package/dist/adonisjs/middleware.cjs +214 -0
  9. package/dist/adonisjs/middleware.cjs.map +1 -0
  10. package/dist/adonisjs/middleware.d.cts +21 -0
  11. package/dist/adonisjs/middleware.d.ts +21 -0
  12. package/dist/adonisjs/middleware.js +185 -0
  13. package/dist/adonisjs/middleware.js.map +1 -0
  14. package/dist/adonisjs/provider.cjs +1083 -0
  15. package/dist/adonisjs/provider.cjs.map +1 -0
  16. package/dist/adonisjs/provider.d.cts +28 -0
  17. package/dist/adonisjs/provider.d.ts +28 -0
  18. package/dist/adonisjs/provider.js +1057 -0
  19. package/dist/adonisjs/provider.js.map +1 -0
  20. package/dist/common/client.cjs +1 -1
  21. package/dist/common/client.cjs.map +1 -1
  22. package/dist/common/client.js +1 -1
  23. package/dist/common/client.js.map +1 -1
  24. package/dist/common/consumerRegistry.cjs.map +1 -1
  25. package/dist/common/consumerRegistry.js.map +1 -1
  26. package/dist/common/logging.cjs.map +1 -1
  27. package/dist/common/logging.js.map +1 -1
  28. package/dist/common/packageVersions.cjs.map +1 -1
  29. package/dist/common/packageVersions.js.map +1 -1
  30. package/dist/common/paramValidation.cjs.map +1 -1
  31. package/dist/common/paramValidation.js.map +1 -1
  32. package/dist/common/requestCounter.cjs.map +1 -1
  33. package/dist/common/requestCounter.js.map +1 -1
  34. package/dist/common/requestLogger.cjs.map +1 -1
  35. package/dist/common/requestLogger.js.map +1 -1
  36. package/dist/common/sentry.cjs.map +1 -1
  37. package/dist/common/sentry.js.map +1 -1
  38. package/dist/common/serverErrorCounter.cjs.map +1 -1
  39. package/dist/common/serverErrorCounter.js.map +1 -1
  40. package/dist/common/tempGzipFile.cjs.map +1 -1
  41. package/dist/common/tempGzipFile.js.map +1 -1
  42. package/dist/common/types.cjs.map +1 -1
  43. package/dist/common/types.d.cts +0 -1
  44. package/dist/common/types.d.ts +0 -1
  45. package/dist/common/utils.cjs +48 -0
  46. package/dist/common/utils.cjs.map +1 -0
  47. package/dist/common/utils.d.cts +5 -0
  48. package/dist/common/utils.d.ts +5 -0
  49. package/dist/common/utils.js +25 -0
  50. package/dist/common/utils.js.map +1 -0
  51. package/dist/common/validationErrorCounter.cjs.map +1 -1
  52. package/dist/common/validationErrorCounter.js.map +1 -1
  53. package/dist/express/index.cjs +91 -25
  54. package/dist/express/index.cjs.map +1 -1
  55. package/dist/express/index.js +91 -25
  56. package/dist/express/index.js.map +1 -1
  57. package/dist/express/middleware.cjs +91 -25
  58. package/dist/express/middleware.cjs.map +1 -1
  59. package/dist/express/middleware.js +91 -25
  60. package/dist/express/middleware.js.map +1 -1
  61. package/dist/express/utils.cjs +59 -16
  62. package/dist/express/utils.cjs.map +1 -1
  63. package/dist/express/utils.d.cts +11 -2
  64. package/dist/express/utils.d.ts +11 -2
  65. package/dist/express/utils.js +56 -15
  66. package/dist/express/utils.js.map +1 -1
  67. package/dist/fastify/index.cjs +22 -6
  68. package/dist/fastify/index.cjs.map +1 -1
  69. package/dist/fastify/index.js +22 -6
  70. package/dist/fastify/index.js.map +1 -1
  71. package/dist/fastify/plugin.cjs +22 -6
  72. package/dist/fastify/plugin.cjs.map +1 -1
  73. package/dist/fastify/plugin.js +22 -6
  74. package/dist/fastify/plugin.js.map +1 -1
  75. package/dist/hono/index.cjs +21 -2
  76. package/dist/hono/index.cjs.map +1 -1
  77. package/dist/hono/index.js +21 -2
  78. package/dist/hono/index.js.map +1 -1
  79. package/dist/hono/middleware.cjs +21 -2
  80. package/dist/hono/middleware.cjs.map +1 -1
  81. package/dist/hono/middleware.js +21 -2
  82. package/dist/hono/middleware.js.map +1 -1
  83. package/dist/koa/index.cjs +3 -3
  84. package/dist/koa/index.cjs.map +1 -1
  85. package/dist/koa/index.js +3 -3
  86. package/dist/koa/index.js.map +1 -1
  87. package/dist/koa/middleware.cjs +3 -3
  88. package/dist/koa/middleware.cjs.map +1 -1
  89. package/dist/koa/middleware.js +3 -3
  90. package/dist/koa/middleware.js.map +1 -1
  91. package/dist/nestjs/index.cjs +91 -25
  92. package/dist/nestjs/index.cjs.map +1 -1
  93. package/dist/nestjs/index.js +91 -25
  94. package/dist/nestjs/index.js.map +1 -1
  95. package/package.json +71 -52
@@ -1 +1 @@
1
- {"version":3,"sources":["validationErrorCounter.ts"],"sourcesContent":["import { createHash } from \"crypto\";\n\nimport {\n ConsumerMethodPath,\n ValidationError,\n ValidationErrorsItem,\n} from \"./types.js\";\n\nexport default class ValidationErrorCounter {\n private errorCounts: Map<string, number>;\n private errorDetails: Map<string, ConsumerMethodPath & ValidationError>;\n\n constructor() {\n this.errorCounts = new Map();\n this.errorDetails = new Map();\n }\n\n public addValidationError(\n validationError: ConsumerMethodPath & ValidationError,\n ) {\n const key = this.getKey(validationError);\n if (!this.errorDetails.has(key)) {\n this.errorDetails.set(key, validationError);\n }\n this.errorCounts.set(key, (this.errorCounts.get(key) || 0) + 1);\n }\n\n public getAndResetValidationErrors() {\n const data: Array<ValidationErrorsItem> = [];\n this.errorCounts.forEach((count, key) => {\n const validationError = this.errorDetails.get(key);\n if (validationError) {\n data.push({\n consumer: validationError.consumer || null,\n method: validationError.method,\n path: validationError.path,\n loc: validationError.loc.split(\".\"),\n msg: validationError.msg,\n type: validationError.type,\n error_count: count,\n });\n }\n });\n this.errorCounts.clear();\n this.errorDetails.clear();\n return data;\n }\n\n private getKey(validationError: ConsumerMethodPath & ValidationError) {\n const hashInput = [\n validationError.consumer || \"\",\n validationError.method.toUpperCase(),\n validationError.path,\n validationError.loc,\n validationError.msg.trim(),\n validationError.type,\n ].join(\"|\");\n return createHash(\"md5\").update(hashInput).digest(\"hex\");\n }\n}\n"],"mappings":";;;;AAAA,SAASA,kBAAkB;AAQ3B,IAAqBC,0BAArB,MAAqBA,wBAAAA;EACXC;EACAC;EAERC,cAAc;AACZ,SAAKF,cAAc,oBAAIG,IAAAA;AACvB,SAAKF,eAAe,oBAAIE,IAAAA;EAC1B;EAEOC,mBACLC,iBACA;AACA,UAAMC,MAAM,KAAKC,OAAOF,eAAAA;AACxB,QAAI,CAAC,KAAKJ,aAAaO,IAAIF,GAAAA,GAAM;AAC/B,WAAKL,aAAaQ,IAAIH,KAAKD,eAAAA;IAC7B;AACA,SAAKL,YAAYS,IAAIH,MAAM,KAAKN,YAAYU,IAAIJ,GAAAA,KAAQ,KAAK,CAAA;EAC/D;EAEOK,8BAA8B;AACnC,UAAMC,OAAoC,CAAA;AAC1C,SAAKZ,YAAYa,QAAQ,CAACC,OAAOR,QAAAA;AAC/B,YAAMD,kBAAkB,KAAKJ,aAAaS,IAAIJ,GAAAA;AAC9C,UAAID,iBAAiB;AACnBO,aAAKG,KAAK;UACRC,UAAUX,gBAAgBW,YAAY;UACtCC,QAAQZ,gBAAgBY;UACxBC,MAAMb,gBAAgBa;UACtBC,KAAKd,gBAAgBc,IAAIC,MAAM,GAAA;UAC/BC,KAAKhB,gBAAgBgB;UACrBC,MAAMjB,gBAAgBiB;UACtBC,aAAaT;QACf,CAAA;MACF;IACF,CAAA;AACA,SAAKd,YAAYwB,MAAK;AACtB,SAAKvB,aAAauB,MAAK;AACvB,WAAOZ;EACT;EAEQL,OAAOF,iBAAuD;AACpE,UAAMoB,YAAY;MAChBpB,gBAAgBW,YAAY;MAC5BX,gBAAgBY,OAAOS,YAAW;MAClCrB,gBAAgBa;MAChBb,gBAAgBc;MAChBd,gBAAgBgB,IAAIM,KAAI;MACxBtB,gBAAgBiB;MAChBM,KAAK,GAAA;AACP,WAAOC,WAAW,KAAA,EAAOC,OAAOL,SAAAA,EAAWM,OAAO,KAAA;EACpD;AACF;AAnDqBhC;AAArB,IAAqBA,yBAArB;","names":["createHash","ValidationErrorCounter","errorCounts","errorDetails","constructor","Map","addValidationError","validationError","key","getKey","has","set","get","getAndResetValidationErrors","data","forEach","count","push","consumer","method","path","loc","split","msg","type","error_count","clear","hashInput","toUpperCase","trim","join","createHash","update","digest"]}
1
+ {"version":3,"sources":["../../src/common/validationErrorCounter.ts"],"sourcesContent":["import { createHash } from \"crypto\";\n\nimport {\n ConsumerMethodPath,\n ValidationError,\n ValidationErrorsItem,\n} from \"./types.js\";\n\nexport default class ValidationErrorCounter {\n private errorCounts: Map<string, number>;\n private errorDetails: Map<string, ConsumerMethodPath & ValidationError>;\n\n constructor() {\n this.errorCounts = new Map();\n this.errorDetails = new Map();\n }\n\n public addValidationError(\n validationError: ConsumerMethodPath & ValidationError,\n ) {\n const key = this.getKey(validationError);\n if (!this.errorDetails.has(key)) {\n this.errorDetails.set(key, validationError);\n }\n this.errorCounts.set(key, (this.errorCounts.get(key) || 0) + 1);\n }\n\n public getAndResetValidationErrors() {\n const data: Array<ValidationErrorsItem> = [];\n this.errorCounts.forEach((count, key) => {\n const validationError = this.errorDetails.get(key);\n if (validationError) {\n data.push({\n consumer: validationError.consumer || null,\n method: validationError.method,\n path: validationError.path,\n loc: validationError.loc.split(\".\"),\n msg: validationError.msg,\n type: validationError.type,\n error_count: count,\n });\n }\n });\n this.errorCounts.clear();\n this.errorDetails.clear();\n return data;\n }\n\n private getKey(validationError: ConsumerMethodPath & ValidationError) {\n const hashInput = [\n validationError.consumer || \"\",\n validationError.method.toUpperCase(),\n validationError.path,\n validationError.loc,\n validationError.msg.trim(),\n validationError.type,\n ].join(\"|\");\n return createHash(\"md5\").update(hashInput).digest(\"hex\");\n }\n}\n"],"mappings":";;;;AAAA,SAASA,kBAAkB;AAQ3B,IAAqBC,0BAArB,MAAqBA,wBAAAA;EACXC;EACAC;EAER,cAAc;AACZ,SAAKD,cAAc,oBAAIE,IAAAA;AACvB,SAAKD,eAAe,oBAAIC,IAAAA;EAC1B;EAEOC,mBACLC,iBACA;AACA,UAAMC,MAAM,KAAKC,OAAOF,eAAAA;AACxB,QAAI,CAAC,KAAKH,aAAaM,IAAIF,GAAAA,GAAM;AAC/B,WAAKJ,aAAaO,IAAIH,KAAKD,eAAAA;IAC7B;AACA,SAAKJ,YAAYQ,IAAIH,MAAM,KAAKL,YAAYS,IAAIJ,GAAAA,KAAQ,KAAK,CAAA;EAC/D;EAEOK,8BAA8B;AACnC,UAAMC,OAAoC,CAAA;AAC1C,SAAKX,YAAYY,QAAQ,CAACC,OAAOR,QAAAA;AAC/B,YAAMD,kBAAkB,KAAKH,aAAaQ,IAAIJ,GAAAA;AAC9C,UAAID,iBAAiB;AACnBO,aAAKG,KAAK;UACRC,UAAUX,gBAAgBW,YAAY;UACtCC,QAAQZ,gBAAgBY;UACxBC,MAAMb,gBAAgBa;UACtBC,KAAKd,gBAAgBc,IAAIC,MAAM,GAAA;UAC/BC,KAAKhB,gBAAgBgB;UACrBC,MAAMjB,gBAAgBiB;UACtBC,aAAaT;QACf,CAAA;MACF;IACF,CAAA;AACA,SAAKb,YAAYuB,MAAK;AACtB,SAAKtB,aAAasB,MAAK;AACvB,WAAOZ;EACT;EAEQL,OAAOF,iBAAuD;AACpE,UAAMoB,YAAY;MAChBpB,gBAAgBW,YAAY;MAC5BX,gBAAgBY,OAAOS,YAAW;MAClCrB,gBAAgBa;MAChBb,gBAAgBc;MAChBd,gBAAgBgB,IAAIM,KAAI;MACxBtB,gBAAgBiB;MAChBM,KAAK,GAAA;AACP,WAAOC,WAAW,KAAA,EAAOC,OAAOL,SAAAA,EAAWM,OAAO,KAAA;EACpD;AACF;AAnDqB/B;AAArB,IAAqBA,yBAArB;","names":["createHash","ValidationErrorCounter","errorCounts","errorDetails","Map","addValidationError","validationError","key","getKey","has","set","get","getAndResetValidationErrors","data","forEach","count","push","consumer","method","path","loc","split","msg","type","error_count","clear","hashInput","toUpperCase","trim","join","createHash","update","digest"]}
@@ -816,7 +816,7 @@ var _ApitallyClient = class _ApitallyClient {
816
816
  throw new Error("Apitally client is already initialized");
817
817
  }
818
818
  if (!isValidClientId(clientId)) {
819
- throw new Error(`Invalid client ID '${clientId}' (expecting hexadeciaml UUID format)`);
819
+ throw new Error(`Invalid Apitally client ID '${clientId}' (expecting hexadecimal UUID format)`);
820
820
  }
821
821
  if (!isValidEnv(env)) {
822
822
  throw new Error(`Invalid env '${env}' (expecting 1-32 alphanumeric lowercase characters and hyphens only)`);
@@ -1072,6 +1072,25 @@ function getPackageVersion(name) {
1072
1072
  }
1073
1073
  __name(getPackageVersion, "getPackageVersion");
1074
1074
 
1075
+ // src/common/utils.ts
1076
+ function parseContentLength(contentLength) {
1077
+ if (contentLength === void 0 || contentLength === null) {
1078
+ return void 0;
1079
+ }
1080
+ if (typeof contentLength === "number") {
1081
+ return contentLength;
1082
+ }
1083
+ if (typeof contentLength === "string") {
1084
+ const parsed = parseInt(contentLength);
1085
+ return isNaN(parsed) ? void 0 : parsed;
1086
+ }
1087
+ if (Array.isArray(contentLength)) {
1088
+ return parseContentLength(contentLength[0]);
1089
+ }
1090
+ return void 0;
1091
+ }
1092
+ __name(parseContentLength, "parseContentLength");
1093
+
1075
1094
  // src/express/utils.js
1076
1095
  var regExpToParseExpressPathRegExp = /^\/\^\\?\/?(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\\?\/?\([^)]+\)\)))\\\/.*/;
1077
1096
  var regExpToReplaceExpressPathRegExpParams = /\(\?:\\?\/?\([^)]+\)\)/;
@@ -1083,6 +1102,29 @@ var STACK_ITEM_VALID_NAMES = [
1083
1102
  "bound dispatch",
1084
1103
  "mounted_app"
1085
1104
  ];
1105
+ var getRouterInfo = /* @__PURE__ */ __name(function(app) {
1106
+ var _a2, _b;
1107
+ if (app.stack) {
1108
+ return {
1109
+ stack: app.stack,
1110
+ version: "v4"
1111
+ };
1112
+ } else if ((_a2 = app._router) == null ? void 0 : _a2.stack) {
1113
+ return {
1114
+ stack: app._router.stack,
1115
+ version: "v4"
1116
+ };
1117
+ } else if ((_b = app.router) == null ? void 0 : _b.stack) {
1118
+ return {
1119
+ stack: app.router.stack,
1120
+ version: "v5"
1121
+ };
1122
+ }
1123
+ return {
1124
+ stack: null,
1125
+ version: "v4"
1126
+ };
1127
+ }, "getRouterInfo");
1086
1128
  var getRouteMethods = /* @__PURE__ */ __name(function(route) {
1087
1129
  let methods = Object.keys(route.methods);
1088
1130
  methods = methods.filter((method) => method !== "_all");
@@ -1115,12 +1157,12 @@ var parseExpressRoute = /* @__PURE__ */ __name(function(route, basePath) {
1115
1157
  });
1116
1158
  return endpoints;
1117
1159
  }, "parseExpressRoute");
1118
- var parseExpressPath = /* @__PURE__ */ __name(function(expressPathRegExp, params) {
1160
+ var parseExpressPathRegExp = /* @__PURE__ */ __name(function(expressPathRegExp, keys) {
1119
1161
  let parsedRegExp = expressPathRegExp.toString();
1120
1162
  let expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
1121
1163
  let paramIndex = 0;
1122
1164
  while (hasParams(parsedRegExp)) {
1123
- const paramName = params[paramIndex].name;
1165
+ const paramName = keys[paramIndex].name;
1124
1166
  const paramId = `:${paramName}`;
1125
1167
  parsedRegExp = parsedRegExp.replace(regExpToReplaceExpressPathRegExpParams, (str) => {
1126
1168
  if (str.startsWith("(?:\\/")) {
@@ -1133,11 +1175,19 @@ var parseExpressPath = /* @__PURE__ */ __name(function(expressPathRegExp, params
1133
1175
  if (parsedRegExp !== expressPathRegExp.toString()) {
1134
1176
  expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
1135
1177
  }
1136
- const parsedPath = expressPathRegExpExec[1].replace(/\\\//g, "/");
1137
- return parsedPath;
1178
+ return expressPathRegExpExec[1].replace(/\\\//g, "/");
1179
+ }, "parseExpressPathRegExp");
1180
+ var parseExpressPath = /* @__PURE__ */ __name(function(expressPath, params) {
1181
+ let result = expressPath;
1182
+ for (const [paramName, paramValue] of Object.entries(params)) {
1183
+ result = result.replace(paramValue, `:${paramName}`);
1184
+ }
1185
+ return result;
1138
1186
  }, "parseExpressPath");
1139
1187
  var parseEndpoints = /* @__PURE__ */ __name(function(app, basePath, endpoints) {
1140
- const stack = app.stack || app._router && app._router.stack;
1188
+ const routerInfo = getRouterInfo(app);
1189
+ const stack = routerInfo.stack;
1190
+ const version = routerInfo.version;
1141
1191
  endpoints = endpoints || [];
1142
1192
  basePath = basePath || "";
1143
1193
  if (!stack) {
@@ -1151,7 +1201,7 @@ var parseEndpoints = /* @__PURE__ */ __name(function(app, basePath, endpoints) {
1151
1201
  ]);
1152
1202
  }
1153
1203
  } else {
1154
- endpoints = parseStack(stack, basePath, endpoints);
1204
+ endpoints = parseStack(stack, basePath, endpoints, version);
1155
1205
  }
1156
1206
  return endpoints;
1157
1207
  }, "parseEndpoints");
@@ -1167,20 +1217,28 @@ var addEndpoints = /* @__PURE__ */ __name(function(currentEndpoints, endpointsTo
1167
1217
  });
1168
1218
  return currentEndpoints;
1169
1219
  }, "addEndpoints");
1170
- var parseStack = /* @__PURE__ */ __name(function(stack, basePath, endpoints) {
1220
+ var parseStack = /* @__PURE__ */ __name(function(stack, basePath, endpoints, version) {
1171
1221
  stack.forEach((stackItem) => {
1172
1222
  if (stackItem.route) {
1173
1223
  const newEndpoints = parseExpressRoute(stackItem.route, basePath);
1174
1224
  endpoints = addEndpoints(endpoints, newEndpoints);
1175
1225
  } else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
1176
- const isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
1177
1226
  let newBasePath = basePath;
1178
- if (isExpressPathRegexp) {
1179
- const parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
1180
- newBasePath += `/${parsedPath}`;
1181
- } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
1182
- const regExpPath = ` RegExp(${stackItem.regexp}) `;
1183
- newBasePath += `/${regExpPath}`;
1227
+ if (version === "v4") {
1228
+ const isExpressPathRegExp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
1229
+ if (isExpressPathRegExp) {
1230
+ const parsedPath = parseExpressPathRegExp(stackItem.regexp, stackItem.keys);
1231
+ newBasePath += `/${parsedPath}`;
1232
+ } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
1233
+ const regExpPath = `RegExp(${stackItem.regexp})`;
1234
+ newBasePath += `/${regExpPath}`;
1235
+ }
1236
+ } else if (version === "v5") {
1237
+ if (!stackItem.path) {
1238
+ return;
1239
+ } else if (stackItem.path !== "/") {
1240
+ newBasePath += stackItem.path.startsWith("/") ? stackItem.path : `/${stackItem.path}`;
1241
+ }
1184
1242
  }
1185
1243
  endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
1186
1244
  }
@@ -1231,12 +1289,14 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1231
1289
  }
1232
1290
  return originalSend.call(res, body);
1233
1291
  };
1234
- res.on("finish", () => {
1292
+ res.once("finish", () => {
1235
1293
  try {
1236
1294
  const responseTime = import_perf_hooks.performance.now() - startTime;
1237
1295
  const path = getRoutePath(req);
1238
1296
  const consumer = getConsumer(req);
1239
1297
  client.consumerRegistry.addOrUpdateConsumer(consumer);
1298
+ const requestSize = parseContentLength(req.get("content-length"));
1299
+ const responseSize = parseContentLength(res.get("content-length"));
1240
1300
  if (path) {
1241
1301
  client.requestCounter.addRequest({
1242
1302
  consumer: consumer == null ? void 0 : consumer.identifier,
@@ -1244,8 +1304,8 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1244
1304
  path,
1245
1305
  statusCode: res.statusCode,
1246
1306
  responseTime,
1247
- requestSize: req.get("content-length"),
1248
- responseSize: res.get("content-length")
1307
+ requestSize,
1308
+ responseSize
1249
1309
  });
1250
1310
  if ((res.statusCode === 400 || res.statusCode === 422) && res.locals.body) {
1251
1311
  let jsonBody;
@@ -1293,14 +1353,14 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1293
1353
  path,
1294
1354
  url: `${req.protocol}://${req.host}${req.originalUrl}`,
1295
1355
  headers: convertHeaders(req.headers),
1296
- size: Number(req.get("content-length")),
1356
+ size: requestSize,
1297
1357
  consumer: consumer == null ? void 0 : consumer.identifier,
1298
1358
  body: convertBody(req.body, req.get("content-type"))
1299
1359
  }, {
1300
1360
  statusCode: res.statusCode,
1301
1361
  responseTime: responseTime / 1e3,
1302
1362
  headers: convertHeaders(res.getHeaders()),
1303
- size: Number(res.get("content-length")),
1363
+ size: responseSize,
1304
1364
  body: convertBody(res.locals.body, res.get("content-type"))
1305
1365
  }, res.locals.serverError);
1306
1366
  }
@@ -1328,8 +1388,11 @@ var getRoutePath = /* @__PURE__ */ __name((req) => {
1328
1388
  return;
1329
1389
  }
1330
1390
  if (req.baseUrl) {
1331
- const routerPath = getRouterPath(req.app._router.stack, req.baseUrl);
1332
- return req.route.path === "/" ? routerPath : routerPath + req.route.path;
1391
+ const routerInfo = getRouterInfo(req.app);
1392
+ if (routerInfo.stack) {
1393
+ const routerPath = getRouterPath(routerInfo.stack, req.baseUrl);
1394
+ return req.route.path === "/" ? routerPath : routerPath + req.route.path;
1395
+ }
1333
1396
  }
1334
1397
  return req.route.path;
1335
1398
  }, "getRoutePath");
@@ -1339,12 +1402,15 @@ var getRouterPath = /* @__PURE__ */ __name((stack, baseUrl) => {
1339
1402
  while (stack && stack.length > 0) {
1340
1403
  const routerLayer = stack.find((layer) => {
1341
1404
  var _a3;
1342
- return layer.name === "router" && layer.path && ((_a3 = layer.regexp) == null ? void 0 : _a3.test(baseUrl));
1405
+ return layer.name === "router" && layer.path && (baseUrl.startsWith(layer.path) || ((_a3 = layer.regexp) == null ? void 0 : _a3.test(baseUrl)));
1343
1406
  });
1344
1407
  if (routerLayer) {
1345
- if (routerLayer.keys.length > 0) {
1346
- const parsedPath = parseExpressPath(routerLayer.regexp, routerLayer.keys);
1408
+ if (routerLayer.regexp && routerLayer.keys && routerLayer.keys.length > 0) {
1409
+ const parsedPath = parseExpressPathRegExp(routerLayer.regexp, routerLayer.keys);
1347
1410
  routerPaths.push("/" + parsedPath);
1411
+ } else if (routerLayer.params && Object.keys(routerLayer.params).length > 0) {
1412
+ const parsedPath = parseExpressPath(routerLayer.path, routerLayer.params);
1413
+ routerPaths.push(parsedPath);
1348
1414
  } else {
1349
1415
  routerPaths.push(routerLayer.path);
1350
1416
  }