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
@@ -814,7 +814,7 @@ var _ApitallyClient = class _ApitallyClient {
814
814
  throw new Error("Apitally client is already initialized");
815
815
  }
816
816
  if (!isValidClientId(clientId)) {
817
- throw new Error(`Invalid client ID '${clientId}' (expecting hexadeciaml UUID format)`);
817
+ throw new Error(`Invalid Apitally client ID '${clientId}' (expecting hexadecimal UUID format)`);
818
818
  }
819
819
  if (!isValidEnv(env)) {
820
820
  throw new Error(`Invalid env '${env}' (expecting 1-32 alphanumeric lowercase characters and hyphens only)`);
@@ -1070,6 +1070,25 @@ function getPackageVersion(name) {
1070
1070
  }
1071
1071
  __name(getPackageVersion, "getPackageVersion");
1072
1072
 
1073
+ // src/common/utils.ts
1074
+ function parseContentLength(contentLength) {
1075
+ if (contentLength === void 0 || contentLength === null) {
1076
+ return void 0;
1077
+ }
1078
+ if (typeof contentLength === "number") {
1079
+ return contentLength;
1080
+ }
1081
+ if (typeof contentLength === "string") {
1082
+ const parsed = parseInt(contentLength);
1083
+ return isNaN(parsed) ? void 0 : parsed;
1084
+ }
1085
+ if (Array.isArray(contentLength)) {
1086
+ return parseContentLength(contentLength[0]);
1087
+ }
1088
+ return void 0;
1089
+ }
1090
+ __name(parseContentLength, "parseContentLength");
1091
+
1073
1092
  // src/express/utils.js
1074
1093
  var regExpToParseExpressPathRegExp = /^\/\^\\?\/?(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\\?\/?\([^)]+\)\)))\\\/.*/;
1075
1094
  var regExpToReplaceExpressPathRegExpParams = /\(\?:\\?\/?\([^)]+\)\)/;
@@ -1081,6 +1100,29 @@ var STACK_ITEM_VALID_NAMES = [
1081
1100
  "bound dispatch",
1082
1101
  "mounted_app"
1083
1102
  ];
1103
+ var getRouterInfo = /* @__PURE__ */ __name(function(app) {
1104
+ var _a2, _b;
1105
+ if (app.stack) {
1106
+ return {
1107
+ stack: app.stack,
1108
+ version: "v4"
1109
+ };
1110
+ } else if ((_a2 = app._router) == null ? void 0 : _a2.stack) {
1111
+ return {
1112
+ stack: app._router.stack,
1113
+ version: "v4"
1114
+ };
1115
+ } else if ((_b = app.router) == null ? void 0 : _b.stack) {
1116
+ return {
1117
+ stack: app.router.stack,
1118
+ version: "v5"
1119
+ };
1120
+ }
1121
+ return {
1122
+ stack: null,
1123
+ version: "v4"
1124
+ };
1125
+ }, "getRouterInfo");
1084
1126
  var getRouteMethods = /* @__PURE__ */ __name(function(route) {
1085
1127
  let methods = Object.keys(route.methods);
1086
1128
  methods = methods.filter((method) => method !== "_all");
@@ -1113,12 +1155,12 @@ var parseExpressRoute = /* @__PURE__ */ __name(function(route, basePath) {
1113
1155
  });
1114
1156
  return endpoints;
1115
1157
  }, "parseExpressRoute");
1116
- var parseExpressPath = /* @__PURE__ */ __name(function(expressPathRegExp, params) {
1158
+ var parseExpressPathRegExp = /* @__PURE__ */ __name(function(expressPathRegExp, keys) {
1117
1159
  let parsedRegExp = expressPathRegExp.toString();
1118
1160
  let expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
1119
1161
  let paramIndex = 0;
1120
1162
  while (hasParams(parsedRegExp)) {
1121
- const paramName = params[paramIndex].name;
1163
+ const paramName = keys[paramIndex].name;
1122
1164
  const paramId = `:${paramName}`;
1123
1165
  parsedRegExp = parsedRegExp.replace(regExpToReplaceExpressPathRegExpParams, (str) => {
1124
1166
  if (str.startsWith("(?:\\/")) {
@@ -1131,11 +1173,19 @@ var parseExpressPath = /* @__PURE__ */ __name(function(expressPathRegExp, params
1131
1173
  if (parsedRegExp !== expressPathRegExp.toString()) {
1132
1174
  expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
1133
1175
  }
1134
- const parsedPath = expressPathRegExpExec[1].replace(/\\\//g, "/");
1135
- return parsedPath;
1176
+ return expressPathRegExpExec[1].replace(/\\\//g, "/");
1177
+ }, "parseExpressPathRegExp");
1178
+ var parseExpressPath = /* @__PURE__ */ __name(function(expressPath, params) {
1179
+ let result = expressPath;
1180
+ for (const [paramName, paramValue] of Object.entries(params)) {
1181
+ result = result.replace(paramValue, `:${paramName}`);
1182
+ }
1183
+ return result;
1136
1184
  }, "parseExpressPath");
1137
1185
  var parseEndpoints = /* @__PURE__ */ __name(function(app, basePath, endpoints) {
1138
- const stack = app.stack || app._router && app._router.stack;
1186
+ const routerInfo = getRouterInfo(app);
1187
+ const stack = routerInfo.stack;
1188
+ const version = routerInfo.version;
1139
1189
  endpoints = endpoints || [];
1140
1190
  basePath = basePath || "";
1141
1191
  if (!stack) {
@@ -1149,7 +1199,7 @@ var parseEndpoints = /* @__PURE__ */ __name(function(app, basePath, endpoints) {
1149
1199
  ]);
1150
1200
  }
1151
1201
  } else {
1152
- endpoints = parseStack(stack, basePath, endpoints);
1202
+ endpoints = parseStack(stack, basePath, endpoints, version);
1153
1203
  }
1154
1204
  return endpoints;
1155
1205
  }, "parseEndpoints");
@@ -1165,20 +1215,28 @@ var addEndpoints = /* @__PURE__ */ __name(function(currentEndpoints, endpointsTo
1165
1215
  });
1166
1216
  return currentEndpoints;
1167
1217
  }, "addEndpoints");
1168
- var parseStack = /* @__PURE__ */ __name(function(stack, basePath, endpoints) {
1218
+ var parseStack = /* @__PURE__ */ __name(function(stack, basePath, endpoints, version) {
1169
1219
  stack.forEach((stackItem) => {
1170
1220
  if (stackItem.route) {
1171
1221
  const newEndpoints = parseExpressRoute(stackItem.route, basePath);
1172
1222
  endpoints = addEndpoints(endpoints, newEndpoints);
1173
1223
  } else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
1174
- const isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
1175
1224
  let newBasePath = basePath;
1176
- if (isExpressPathRegexp) {
1177
- const parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
1178
- newBasePath += `/${parsedPath}`;
1179
- } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
1180
- const regExpPath = ` RegExp(${stackItem.regexp}) `;
1181
- newBasePath += `/${regExpPath}`;
1225
+ if (version === "v4") {
1226
+ const isExpressPathRegExp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
1227
+ if (isExpressPathRegExp) {
1228
+ const parsedPath = parseExpressPathRegExp(stackItem.regexp, stackItem.keys);
1229
+ newBasePath += `/${parsedPath}`;
1230
+ } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
1231
+ const regExpPath = `RegExp(${stackItem.regexp})`;
1232
+ newBasePath += `/${regExpPath}`;
1233
+ }
1234
+ } else if (version === "v5") {
1235
+ if (!stackItem.path) {
1236
+ return;
1237
+ } else if (stackItem.path !== "/") {
1238
+ newBasePath += stackItem.path.startsWith("/") ? stackItem.path : `/${stackItem.path}`;
1239
+ }
1182
1240
  }
1183
1241
  endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
1184
1242
  }
@@ -1229,12 +1287,14 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1229
1287
  }
1230
1288
  return originalSend.call(res, body);
1231
1289
  };
1232
- res.on("finish", () => {
1290
+ res.once("finish", () => {
1233
1291
  try {
1234
1292
  const responseTime = import_perf_hooks.performance.now() - startTime;
1235
1293
  const path = getRoutePath(req);
1236
1294
  const consumer = getConsumer(req);
1237
1295
  client.consumerRegistry.addOrUpdateConsumer(consumer);
1296
+ const requestSize = parseContentLength(req.get("content-length"));
1297
+ const responseSize = parseContentLength(res.get("content-length"));
1238
1298
  if (path) {
1239
1299
  client.requestCounter.addRequest({
1240
1300
  consumer: consumer == null ? void 0 : consumer.identifier,
@@ -1242,8 +1302,8 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1242
1302
  path,
1243
1303
  statusCode: res.statusCode,
1244
1304
  responseTime,
1245
- requestSize: req.get("content-length"),
1246
- responseSize: res.get("content-length")
1305
+ requestSize,
1306
+ responseSize
1247
1307
  });
1248
1308
  if ((res.statusCode === 400 || res.statusCode === 422) && res.locals.body) {
1249
1309
  let jsonBody;
@@ -1291,14 +1351,14 @@ var getMiddleware = /* @__PURE__ */ __name((app, client) => {
1291
1351
  path,
1292
1352
  url: `${req.protocol}://${req.host}${req.originalUrl}`,
1293
1353
  headers: convertHeaders(req.headers),
1294
- size: Number(req.get("content-length")),
1354
+ size: requestSize,
1295
1355
  consumer: consumer == null ? void 0 : consumer.identifier,
1296
1356
  body: convertBody(req.body, req.get("content-type"))
1297
1357
  }, {
1298
1358
  statusCode: res.statusCode,
1299
1359
  responseTime: responseTime / 1e3,
1300
1360
  headers: convertHeaders(res.getHeaders()),
1301
- size: Number(res.get("content-length")),
1361
+ size: responseSize,
1302
1362
  body: convertBody(res.locals.body, res.get("content-type"))
1303
1363
  }, res.locals.serverError);
1304
1364
  }
@@ -1326,8 +1386,11 @@ var getRoutePath = /* @__PURE__ */ __name((req) => {
1326
1386
  return;
1327
1387
  }
1328
1388
  if (req.baseUrl) {
1329
- const routerPath = getRouterPath(req.app._router.stack, req.baseUrl);
1330
- return req.route.path === "/" ? routerPath : routerPath + req.route.path;
1389
+ const routerInfo = getRouterInfo(req.app);
1390
+ if (routerInfo.stack) {
1391
+ const routerPath = getRouterPath(routerInfo.stack, req.baseUrl);
1392
+ return req.route.path === "/" ? routerPath : routerPath + req.route.path;
1393
+ }
1331
1394
  }
1332
1395
  return req.route.path;
1333
1396
  }, "getRoutePath");
@@ -1337,12 +1400,15 @@ var getRouterPath = /* @__PURE__ */ __name((stack, baseUrl) => {
1337
1400
  while (stack && stack.length > 0) {
1338
1401
  const routerLayer = stack.find((layer) => {
1339
1402
  var _a3;
1340
- return layer.name === "router" && layer.path && ((_a3 = layer.regexp) == null ? void 0 : _a3.test(baseUrl));
1403
+ return layer.name === "router" && layer.path && (baseUrl.startsWith(layer.path) || ((_a3 = layer.regexp) == null ? void 0 : _a3.test(baseUrl)));
1341
1404
  });
1342
1405
  if (routerLayer) {
1343
- if (routerLayer.keys.length > 0) {
1344
- const parsedPath = parseExpressPath(routerLayer.regexp, routerLayer.keys);
1406
+ if (routerLayer.regexp && routerLayer.keys && routerLayer.keys.length > 0) {
1407
+ const parsedPath = parseExpressPathRegExp(routerLayer.regexp, routerLayer.keys);
1345
1408
  routerPaths.push("/" + parsedPath);
1409
+ } else if (routerLayer.params && Object.keys(routerLayer.params).length > 0) {
1410
+ const parsedPath = parseExpressPath(routerLayer.path, routerLayer.params);
1411
+ routerPaths.push(parsedPath);
1346
1412
  } else {
1347
1413
  routerPaths.push(routerLayer.path);
1348
1414
  }