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