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
@@ -792,7 +792,7 @@ var _ApitallyClient = class _ApitallyClient {
792
792
  throw new Error("Apitally client is already initialized");
793
793
  }
794
794
  if (!isValidClientId(clientId)) {
795
- throw new Error(`Invalid client ID '${clientId}' (expecting hexadeciaml UUID format)`);
795
+ throw new Error(`Invalid Apitally client ID '${clientId}' (expecting hexadecimal UUID format)`);
796
796
  }
797
797
  if (!isValidEnv(env)) {
798
798
  throw new Error(`Invalid env '${env}' (expecting 1-32 alphanumeric lowercase characters and hyphens only)`);
@@ -1047,6 +1047,25 @@ function getPackageVersion(name) {
1047
1047
  }
1048
1048
  __name(getPackageVersion, "getPackageVersion");
1049
1049
 
1050
+ // src/common/utils.ts
1051
+ function parseContentLength(contentLength) {
1052
+ if (contentLength === void 0 || contentLength === null) {
1053
+ return void 0;
1054
+ }
1055
+ if (typeof contentLength === "number") {
1056
+ return contentLength;
1057
+ }
1058
+ if (typeof contentLength === "string") {
1059
+ const parsed = parseInt(contentLength);
1060
+ return isNaN(parsed) ? void 0 : parsed;
1061
+ }
1062
+ if (Array.isArray(contentLength)) {
1063
+ return parseContentLength(contentLength[0]);
1064
+ }
1065
+ return void 0;
1066
+ }
1067
+ __name(parseContentLength, "parseContentLength");
1068
+
1050
1069
  // src/express/utils.js
1051
1070
  var regExpToParseExpressPathRegExp = /^\/\^\\?\/?(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\\?\/?\([^)]+\)\)))\\\/.*/;
1052
1071
  var regExpToReplaceExpressPathRegExpParams = /\(\?:\\?\/?\([^)]+\)\)/;
@@ -1058,6 +1077,29 @@ var STACK_ITEM_VALID_NAMES = [
1058
1077
  "bound dispatch",
1059
1078
  "mounted_app"
1060
1079
  ];
1080
+ var getRouterInfo = /* @__PURE__ */ __name(function(app) {
1081
+ var _a3, _b;
1082
+ if (app.stack) {
1083
+ return {
1084
+ stack: app.stack,
1085
+ version: "v4"
1086
+ };
1087
+ } else if ((_a3 = app._router) == null ? void 0 : _a3.stack) {
1088
+ return {
1089
+ stack: app._router.stack,
1090
+ version: "v4"
1091
+ };
1092
+ } else if ((_b = app.router) == null ? void 0 : _b.stack) {
1093
+ return {
1094
+ stack: app.router.stack,
1095
+ version: "v5"
1096
+ };
1097
+ }
1098
+ return {
1099
+ stack: null,
1100
+ version: "v4"
1101
+ };
1102
+ }, "getRouterInfo");
1061
1103
  var getRouteMethods = /* @__PURE__ */ __name(function(route) {
1062
1104
  let methods = Object.keys(route.methods);
1063
1105
  methods = methods.filter((method) => method !== "_all");
@@ -1090,12 +1132,12 @@ var parseExpressRoute = /* @__PURE__ */ __name(function(route, basePath) {
1090
1132
  });
1091
1133
  return endpoints;
1092
1134
  }, "parseExpressRoute");
1093
- var parseExpressPath = /* @__PURE__ */ __name(function(expressPathRegExp, params) {
1135
+ var parseExpressPathRegExp = /* @__PURE__ */ __name(function(expressPathRegExp, keys) {
1094
1136
  let parsedRegExp = expressPathRegExp.toString();
1095
1137
  let expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
1096
1138
  let paramIndex = 0;
1097
1139
  while (hasParams(parsedRegExp)) {
1098
- const paramName = params[paramIndex].name;
1140
+ const paramName = keys[paramIndex].name;
1099
1141
  const paramId = `:${paramName}`;
1100
1142
  parsedRegExp = parsedRegExp.replace(regExpToReplaceExpressPathRegExpParams, (str) => {
1101
1143
  if (str.startsWith("(?:\\/")) {
@@ -1108,11 +1150,19 @@ var parseExpressPath = /* @__PURE__ */ __name(function(expressPathRegExp, params
1108
1150
  if (parsedRegExp !== expressPathRegExp.toString()) {
1109
1151
  expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
1110
1152
  }
1111
- const parsedPath = expressPathRegExpExec[1].replace(/\\\//g, "/");
1112
- return parsedPath;
1153
+ return expressPathRegExpExec[1].replace(/\\\//g, "/");
1154
+ }, "parseExpressPathRegExp");
1155
+ var parseExpressPath = /* @__PURE__ */ __name(function(expressPath, params) {
1156
+ let result = expressPath;
1157
+ for (const [paramName, paramValue] of Object.entries(params)) {
1158
+ result = result.replace(paramValue, `:${paramName}`);
1159
+ }
1160
+ return result;
1113
1161
  }, "parseExpressPath");
1114
1162
  var parseEndpoints = /* @__PURE__ */ __name(function(app, basePath, endpoints) {
1115
- const stack = app.stack || app._router && app._router.stack;
1163
+ const routerInfo = getRouterInfo(app);
1164
+ const stack = routerInfo.stack;
1165
+ const version = routerInfo.version;
1116
1166
  endpoints = endpoints || [];
1117
1167
  basePath = basePath || "";
1118
1168
  if (!stack) {
@@ -1126,7 +1176,7 @@ var parseEndpoints = /* @__PURE__ */ __name(function(app, basePath, endpoints) {
1126
1176
  ]);
1127
1177
  }
1128
1178
  } else {
1129
- endpoints = parseStack(stack, basePath, endpoints);
1179
+ endpoints = parseStack(stack, basePath, endpoints, version);
1130
1180
  }
1131
1181
  return endpoints;
1132
1182
  }, "parseEndpoints");
@@ -1142,20 +1192,28 @@ var addEndpoints = /* @__PURE__ */ __name(function(currentEndpoints, endpointsTo
1142
1192
  });
1143
1193
  return currentEndpoints;
1144
1194
  }, "addEndpoints");
1145
- var parseStack = /* @__PURE__ */ __name(function(stack, basePath, endpoints) {
1195
+ var parseStack = /* @__PURE__ */ __name(function(stack, basePath, endpoints, version) {
1146
1196
  stack.forEach((stackItem) => {
1147
1197
  if (stackItem.route) {
1148
1198
  const newEndpoints = parseExpressRoute(stackItem.route, basePath);
1149
1199
  endpoints = addEndpoints(endpoints, newEndpoints);
1150
1200
  } else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
1151
- const isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
1152
1201
  let newBasePath = basePath;
1153
- if (isExpressPathRegexp) {
1154
- const parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
1155
- newBasePath += `/${parsedPath}`;
1156
- } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
1157
- const regExpPath = ` RegExp(${stackItem.regexp}) `;
1158
- newBasePath += `/${regExpPath}`;
1202
+ if (version === "v4") {
1203
+ const isExpressPathRegExp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
1204
+ if (isExpressPathRegExp) {
1205
+ const parsedPath = parseExpressPathRegExp(stackItem.regexp, stackItem.keys);
1206
+ newBasePath += `/${parsedPath}`;
1207
+ } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
1208
+ const regExpPath = `RegExp(${stackItem.regexp})`;
1209
+ newBasePath += `/${regExpPath}`;
1210
+ }
1211
+ } else if (version === "v5") {
1212
+ if (!stackItem.path) {
1213
+ return;
1214
+ } else if (stackItem.path !== "/") {
1215
+ newBasePath += stackItem.path.startsWith("/") ? stackItem.path : `/${stackItem.path}`;
1216
+ }
1159
1217
  }
1160
1218
  endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
1161
1219
  }
@@ -1206,12 +1264,14 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1206
1264
  }
1207
1265
  return originalSend.call(res, body);
1208
1266
  };
1209
- res.on("finish", () => {
1267
+ res.once("finish", () => {
1210
1268
  try {
1211
1269
  const responseTime = performance.now() - startTime;
1212
1270
  const path = getRoutePath(req);
1213
1271
  const consumer = getConsumer(req);
1214
1272
  client.consumerRegistry.addOrUpdateConsumer(consumer);
1273
+ const requestSize = parseContentLength(req.get("content-length"));
1274
+ const responseSize = parseContentLength(res.get("content-length"));
1215
1275
  if (path) {
1216
1276
  client.requestCounter.addRequest({
1217
1277
  consumer: consumer == null ? void 0 : consumer.identifier,
@@ -1219,8 +1279,8 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1219
1279
  path,
1220
1280
  statusCode: res.statusCode,
1221
1281
  responseTime,
1222
- requestSize: req.get("content-length"),
1223
- responseSize: res.get("content-length")
1282
+ requestSize,
1283
+ responseSize
1224
1284
  });
1225
1285
  if ((res.statusCode === 400 || res.statusCode === 422) && res.locals.body) {
1226
1286
  let jsonBody;
@@ -1268,14 +1328,14 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1268
1328
  path,
1269
1329
  url: `${req.protocol}://${req.host}${req.originalUrl}`,
1270
1330
  headers: convertHeaders(req.headers),
1271
- size: Number(req.get("content-length")),
1331
+ size: requestSize,
1272
1332
  consumer: consumer == null ? void 0 : consumer.identifier,
1273
1333
  body: convertBody(req.body, req.get("content-type"))
1274
1334
  }, {
1275
1335
  statusCode: res.statusCode,
1276
1336
  responseTime: responseTime / 1e3,
1277
1337
  headers: convertHeaders(res.getHeaders()),
1278
- size: Number(res.get("content-length")),
1338
+ size: responseSize,
1279
1339
  body: convertBody(res.locals.body, res.get("content-type"))
1280
1340
  }, res.locals.serverError);
1281
1341
  }
@@ -1303,8 +1363,11 @@ var getRoutePath = /* @__PURE__ */ __name((req) => {
1303
1363
  return;
1304
1364
  }
1305
1365
  if (req.baseUrl) {
1306
- const routerPath = getRouterPath(req.app._router.stack, req.baseUrl);
1307
- return req.route.path === "/" ? routerPath : routerPath + req.route.path;
1366
+ const routerInfo = getRouterInfo(req.app);
1367
+ if (routerInfo.stack) {
1368
+ const routerPath = getRouterPath(routerInfo.stack, req.baseUrl);
1369
+ return req.route.path === "/" ? routerPath : routerPath + req.route.path;
1370
+ }
1308
1371
  }
1309
1372
  return req.route.path;
1310
1373
  }, "getRoutePath");
@@ -1314,12 +1377,15 @@ var getRouterPath = /* @__PURE__ */ __name((stack, baseUrl) => {
1314
1377
  while (stack && stack.length > 0) {
1315
1378
  const routerLayer = stack.find((layer) => {
1316
1379
  var _a4;
1317
- return layer.name === "router" && layer.path && ((_a4 = layer.regexp) == null ? void 0 : _a4.test(baseUrl));
1380
+ return layer.name === "router" && layer.path && (baseUrl.startsWith(layer.path) || ((_a4 = layer.regexp) == null ? void 0 : _a4.test(baseUrl)));
1318
1381
  });
1319
1382
  if (routerLayer) {
1320
- if (routerLayer.keys.length > 0) {
1321
- const parsedPath = parseExpressPath(routerLayer.regexp, routerLayer.keys);
1383
+ if (routerLayer.regexp && routerLayer.keys && routerLayer.keys.length > 0) {
1384
+ const parsedPath = parseExpressPathRegExp(routerLayer.regexp, routerLayer.keys);
1322
1385
  routerPaths.push("/" + parsedPath);
1386
+ } else if (routerLayer.params && Object.keys(routerLayer.params).length > 0) {
1387
+ const parsedPath = parseExpressPath(routerLayer.path, routerLayer.params);
1388
+ routerPaths.push(parsedPath);
1323
1389
  } else {
1324
1390
  routerPaths.push(routerLayer.path);
1325
1391
  }