apitally 0.14.0 → 0.15.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 (118) hide show
  1. package/README.md +24 -1
  2. package/dist/adonisjs/index.cjs +6 -4
  3. package/dist/adonisjs/index.cjs.map +1 -1
  4. package/dist/adonisjs/index.d.cts +2 -2
  5. package/dist/adonisjs/index.d.ts +2 -2
  6. package/dist/adonisjs/index.js +6 -4
  7. package/dist/adonisjs/index.js.map +1 -1
  8. package/dist/adonisjs/middleware.cjs +19 -19
  9. package/dist/adonisjs/middleware.cjs.map +1 -1
  10. package/dist/adonisjs/middleware.js +19 -19
  11. package/dist/adonisjs/middleware.js.map +1 -1
  12. package/dist/adonisjs/provider.cjs +11 -4
  13. package/dist/adonisjs/provider.cjs.map +1 -1
  14. package/dist/adonisjs/provider.js +11 -4
  15. package/dist/adonisjs/provider.js.map +1 -1
  16. package/dist/common/client.cjs +5 -0
  17. package/dist/common/client.cjs.map +1 -1
  18. package/dist/common/client.js +5 -0
  19. package/dist/common/client.js.map +1 -1
  20. package/dist/common/{utils.cjs → headers.cjs} +14 -5
  21. package/dist/common/headers.cjs.map +1 -0
  22. package/dist/common/{utils.d.cts → headers.d.cts} +2 -1
  23. package/dist/common/{utils.d.ts → headers.d.ts} +2 -1
  24. package/dist/common/{utils.js → headers.js} +10 -2
  25. package/dist/common/headers.js.map +1 -0
  26. package/dist/common/requestLogger.cjs +5 -0
  27. package/dist/common/requestLogger.cjs.map +1 -1
  28. package/dist/common/requestLogger.d.cts +1 -0
  29. package/dist/common/requestLogger.d.ts +1 -0
  30. package/dist/common/requestLogger.js +5 -0
  31. package/dist/common/requestLogger.js.map +1 -1
  32. package/dist/common/response.cjs +106 -0
  33. package/dist/common/response.cjs.map +1 -0
  34. package/dist/common/response.d.cts +6 -0
  35. package/dist/common/response.d.ts +6 -0
  36. package/dist/common/response.js +80 -0
  37. package/dist/common/response.js.map +1 -0
  38. package/dist/express/index.cjs +69 -42
  39. package/dist/express/index.cjs.map +1 -1
  40. package/dist/express/index.d.cts +2 -2
  41. package/dist/express/index.d.ts +2 -2
  42. package/dist/express/index.js +67 -41
  43. package/dist/express/index.js.map +1 -1
  44. package/dist/express/middleware.cjs +69 -42
  45. package/dist/express/middleware.cjs.map +1 -1
  46. package/dist/express/middleware.d.cts +5 -4
  47. package/dist/express/middleware.d.ts +5 -4
  48. package/dist/express/middleware.js +67 -41
  49. package/dist/express/middleware.js.map +1 -1
  50. package/dist/fastify/index.cjs +44 -29
  51. package/dist/fastify/index.cjs.map +1 -1
  52. package/dist/fastify/index.d.cts +2 -2
  53. package/dist/fastify/index.d.ts +2 -2
  54. package/dist/fastify/index.js +41 -27
  55. package/dist/fastify/index.js.map +1 -1
  56. package/dist/fastify/plugin.cjs +46 -28
  57. package/dist/fastify/plugin.cjs.map +1 -1
  58. package/dist/fastify/plugin.d.cts +3 -2
  59. package/dist/fastify/plugin.d.ts +3 -2
  60. package/dist/fastify/plugin.js +41 -27
  61. package/dist/fastify/plugin.js.map +1 -1
  62. package/dist/h3/index.cjs +1336 -0
  63. package/dist/h3/index.cjs.map +1 -0
  64. package/dist/h3/index.d.cts +9 -0
  65. package/dist/h3/index.d.ts +9 -0
  66. package/dist/h3/index.js +1305 -0
  67. package/dist/h3/index.js.map +1 -0
  68. package/dist/h3/plugin.cjs +1334 -0
  69. package/dist/h3/plugin.cjs.map +1 -0
  70. package/dist/h3/plugin.d.cts +21 -0
  71. package/dist/h3/plugin.d.ts +21 -0
  72. package/dist/h3/plugin.js +1305 -0
  73. package/dist/h3/plugin.js.map +1 -0
  74. package/dist/h3/utils.cjs +127 -0
  75. package/dist/h3/utils.cjs.map +1 -0
  76. package/dist/h3/utils.d.cts +14 -0
  77. package/dist/h3/utils.d.ts +14 -0
  78. package/dist/h3/utils.js +107 -0
  79. package/dist/h3/utils.js.map +1 -0
  80. package/dist/hono/index.cjs +177 -141
  81. package/dist/hono/index.cjs.map +1 -1
  82. package/dist/hono/index.d.cts +2 -2
  83. package/dist/hono/index.d.ts +2 -2
  84. package/dist/hono/index.js +175 -140
  85. package/dist/hono/index.js.map +1 -1
  86. package/dist/hono/middleware.cjs +177 -141
  87. package/dist/hono/middleware.cjs.map +1 -1
  88. package/dist/hono/middleware.d.cts +4 -3
  89. package/dist/hono/middleware.d.ts +4 -3
  90. package/dist/hono/middleware.js +175 -140
  91. package/dist/hono/middleware.js.map +1 -1
  92. package/dist/hono/utils.cjs +126 -0
  93. package/dist/hono/utils.cjs.map +1 -0
  94. package/dist/hono/utils.d.cts +14 -0
  95. package/dist/hono/utils.d.ts +14 -0
  96. package/dist/hono/utils.js +106 -0
  97. package/dist/hono/utils.js.map +1 -0
  98. package/dist/koa/index.cjs +41 -17
  99. package/dist/koa/index.cjs.map +1 -1
  100. package/dist/koa/index.d.cts +2 -2
  101. package/dist/koa/index.d.ts +2 -2
  102. package/dist/koa/index.js +40 -17
  103. package/dist/koa/index.js.map +1 -1
  104. package/dist/koa/middleware.cjs +41 -17
  105. package/dist/koa/middleware.cjs.map +1 -1
  106. package/dist/koa/middleware.d.cts +4 -3
  107. package/dist/koa/middleware.d.ts +4 -3
  108. package/dist/koa/middleware.js +40 -17
  109. package/dist/koa/middleware.js.map +1 -1
  110. package/dist/nestjs/index.cjs +66 -44
  111. package/dist/nestjs/index.cjs.map +1 -1
  112. package/dist/nestjs/index.d.cts +2 -2
  113. package/dist/nestjs/index.d.ts +2 -2
  114. package/dist/nestjs/index.js +65 -43
  115. package/dist/nestjs/index.js.map +1 -1
  116. package/package.json +21 -2
  117. package/dist/common/utils.cjs.map +0 -1
  118. package/dist/common/utils.js.map +0 -1
@@ -10,7 +10,6 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
10
10
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
11
11
 
12
12
  // src/hono/middleware.ts
13
- import { isMiddleware } from "hono/utils/handler";
14
13
  import { performance } from "perf_hooks";
15
14
 
16
15
  // src/common/client.ts
@@ -377,6 +376,8 @@ var BODY_MASKED = Buffer3.from("<masked>");
377
376
  var MASKED = "******";
378
377
  var ALLOWED_CONTENT_TYPES = [
379
378
  "application/json",
379
+ "application/problem+json",
380
+ "application/vnd.api+json",
380
381
  "text/plain"
381
382
  ];
382
383
  var EXCLUDE_PATH_PATTERNS = [
@@ -441,6 +442,9 @@ var _RequestLogger = class _RequestLogger {
441
442
  }, 1e3);
442
443
  }
443
444
  }
445
+ get maxBodySize() {
446
+ return MAX_BODY_SIZE;
447
+ }
444
448
  shouldExcludePath(urlPath) {
445
449
  const patterns = [
446
450
  ...this.config.excludePaths,
@@ -995,24 +999,7 @@ __name(_ApitallyClient, "ApitallyClient");
995
999
  __publicField(_ApitallyClient, "instance");
996
1000
  var ApitallyClient = _ApitallyClient;
997
1001
 
998
- // src/common/packageVersions.ts
999
- import { createRequire } from "module";
1000
- function getPackageVersion(name) {
1001
- const packageJsonPath = `${name}/package.json`;
1002
- try {
1003
- return __require(packageJsonPath).version || null;
1004
- } catch (error) {
1005
- try {
1006
- const _require = createRequire(import.meta.url);
1007
- return _require(packageJsonPath).version || null;
1008
- } catch (error2) {
1009
- return null;
1010
- }
1011
- }
1012
- }
1013
- __name(getPackageVersion, "getPackageVersion");
1014
-
1015
- // src/common/utils.ts
1002
+ // src/common/headers.ts
1016
1003
  function parseContentLength(contentLength) {
1017
1004
  if (contentLength === void 0 || contentLength === null) {
1018
1005
  return void 0;
@@ -1031,102 +1018,8 @@ function parseContentLength(contentLength) {
1031
1018
  }
1032
1019
  __name(parseContentLength, "parseContentLength");
1033
1020
 
1034
- // src/hono/middleware.ts
1035
- var useApitally = /* @__PURE__ */ __name((app, config) => {
1036
- const client = new ApitallyClient(config);
1037
- const middleware = getMiddleware(client);
1038
- app.use(middleware);
1039
- setTimeout(() => {
1040
- client.setStartupData(getAppInfo(app, config.appVersion));
1041
- }, 1e3);
1042
- }, "useApitally");
1043
- var getMiddleware = /* @__PURE__ */ __name((client) => {
1044
- return async (c, next) => {
1045
- if (!client.isEnabled()) {
1046
- await next();
1047
- return;
1048
- }
1049
- const startTime = performance.now();
1050
- await next();
1051
- let response;
1052
- const responseTime = performance.now() - startTime;
1053
- const [responseSize, newResponse] = await measureResponseSize(c.res);
1054
- const requestSize = parseContentLength(c.req.header("content-length"));
1055
- const consumer = getConsumer(c);
1056
- client.consumerRegistry.addOrUpdateConsumer(consumer);
1057
- client.requestCounter.addRequest({
1058
- consumer: consumer == null ? void 0 : consumer.identifier,
1059
- method: c.req.method,
1060
- path: c.req.routePath,
1061
- statusCode: c.res.status,
1062
- responseTime,
1063
- requestSize,
1064
- responseSize
1065
- });
1066
- response = newResponse;
1067
- if (c.res.status === 400) {
1068
- const [responseJson, newResponse2] = await getResponseJson(response);
1069
- const validationErrors = extractZodErrors(responseJson);
1070
- validationErrors.forEach((error) => {
1071
- client.validationErrorCounter.addValidationError({
1072
- consumer: consumer == null ? void 0 : consumer.identifier,
1073
- method: c.req.method,
1074
- path: c.req.routePath,
1075
- ...error
1076
- });
1077
- });
1078
- response = newResponse2;
1079
- }
1080
- if (c.error) {
1081
- client.serverErrorCounter.addServerError({
1082
- consumer: consumer == null ? void 0 : consumer.identifier,
1083
- method: c.req.method,
1084
- path: c.req.routePath,
1085
- type: c.error.name,
1086
- msg: c.error.message,
1087
- traceback: c.error.stack || ""
1088
- });
1089
- }
1090
- if (client.requestLogger.enabled) {
1091
- let requestBody;
1092
- let responseBody;
1093
- let newResponse2 = response;
1094
- const responseContentType = c.res.headers.get("content-type");
1095
- if (client.requestLogger.config.logRequestBody) {
1096
- requestBody = Buffer.from(await c.req.arrayBuffer());
1097
- }
1098
- if (client.requestLogger.config.logResponseBody && client.requestLogger.isSupportedContentType(responseContentType)) {
1099
- [responseBody, newResponse2] = await getResponseBody(response);
1100
- response = newResponse2;
1101
- }
1102
- client.requestLogger.logRequest({
1103
- timestamp: Date.now() / 1e3,
1104
- method: c.req.method,
1105
- path: c.req.routePath,
1106
- url: c.req.url,
1107
- headers: convertHeaders(c.req.header()),
1108
- size: Number(requestSize),
1109
- consumer: consumer == null ? void 0 : consumer.identifier,
1110
- body: requestBody
1111
- }, {
1112
- statusCode: c.res.status,
1113
- responseTime: responseTime / 1e3,
1114
- headers: convertHeaders(c.res.headers),
1115
- size: responseSize,
1116
- body: responseBody
1117
- }, c.error);
1118
- }
1119
- c.res = response;
1120
- };
1121
- }, "getMiddleware");
1122
- var getConsumer = /* @__PURE__ */ __name((c) => {
1123
- const consumer = c.get("apitallyConsumer");
1124
- if (consumer) {
1125
- return consumerFromStringOrObject(consumer);
1126
- }
1127
- return null;
1128
- }, "getConsumer");
1129
- var measureResponseSize = /* @__PURE__ */ __name(async (response) => {
1021
+ // src/common/response.ts
1022
+ async function measureResponseSize(response) {
1130
1023
  const [newResponse1, newResponse2] = await teeResponse(response);
1131
1024
  let size = 0;
1132
1025
  if (newResponse2.body) {
@@ -1144,18 +1037,20 @@ var measureResponseSize = /* @__PURE__ */ __name(async (response) => {
1144
1037
  size,
1145
1038
  newResponse1
1146
1039
  ];
1147
- }, "measureResponseSize");
1148
- var getResponseBody = /* @__PURE__ */ __name(async (response) => {
1040
+ }
1041
+ __name(measureResponseSize, "measureResponseSize");
1042
+ async function getResponseBody(response) {
1149
1043
  const [newResponse1, newResponse2] = await teeResponse(response);
1150
1044
  const responseBuffer = Buffer.from(await newResponse2.arrayBuffer());
1151
1045
  return [
1152
1046
  responseBuffer,
1153
1047
  newResponse1
1154
1048
  ];
1155
- }, "getResponseBody");
1156
- var getResponseJson = /* @__PURE__ */ __name(async (response) => {
1049
+ }
1050
+ __name(getResponseBody, "getResponseBody");
1051
+ async function getResponseJson(response) {
1157
1052
  const contentType = response.headers.get("content-type");
1158
- if (contentType && contentType.includes("application/json")) {
1053
+ if (contentType == null ? void 0 : contentType.includes("application/json")) {
1159
1054
  const [newResponse1, newResponse2] = await teeResponse(response);
1160
1055
  const responseJson = await newResponse2.json();
1161
1056
  return [
@@ -1167,8 +1062,9 @@ var getResponseJson = /* @__PURE__ */ __name(async (response) => {
1167
1062
  null,
1168
1063
  response
1169
1064
  ];
1170
- }, "getResponseJson");
1171
- var teeResponse = /* @__PURE__ */ __name(async (response) => {
1065
+ }
1066
+ __name(getResponseJson, "getResponseJson");
1067
+ async function teeResponse(response) {
1172
1068
  if (!response.body) {
1173
1069
  return [
1174
1070
  response,
@@ -1190,22 +1086,31 @@ var teeResponse = /* @__PURE__ */ __name(async (response) => {
1190
1086
  newResponse1,
1191
1087
  newResponse2
1192
1088
  ];
1193
- }, "teeResponse");
1194
- var extractZodErrors = /* @__PURE__ */ __name((responseJson) => {
1195
- const errors = [];
1196
- if (responseJson && responseJson.success === false && responseJson.error && responseJson.error.name === "ZodError") {
1197
- const zodError = responseJson.error;
1198
- zodError.issues.forEach((zodIssue) => {
1199
- errors.push({
1200
- loc: zodIssue.path.join("."),
1201
- msg: zodIssue.message,
1202
- type: zodIssue.code
1203
- });
1204
- });
1089
+ }
1090
+ __name(teeResponse, "teeResponse");
1091
+
1092
+ // src/hono/utils.ts
1093
+ import { isMiddleware } from "hono/utils/handler";
1094
+
1095
+ // src/common/packageVersions.ts
1096
+ import { createRequire } from "module";
1097
+ function getPackageVersion(name) {
1098
+ const packageJsonPath = `${name}/package.json`;
1099
+ try {
1100
+ return __require(packageJsonPath).version || null;
1101
+ } catch (error) {
1102
+ try {
1103
+ const _require = createRequire(import.meta.url);
1104
+ return _require(packageJsonPath).version || null;
1105
+ } catch (error2) {
1106
+ return null;
1107
+ }
1205
1108
  }
1206
- return errors;
1207
- }, "extractZodErrors");
1208
- var getAppInfo = /* @__PURE__ */ __name((app, appVersion) => {
1109
+ }
1110
+ __name(getPackageVersion, "getPackageVersion");
1111
+
1112
+ // src/hono/utils.ts
1113
+ function getAppInfo(app, appVersion) {
1209
1114
  const versions = [];
1210
1115
  if (process.versions.node) {
1211
1116
  versions.push([
@@ -1244,8 +1149,9 @@ var getAppInfo = /* @__PURE__ */ __name((app, appVersion) => {
1244
1149
  versions: Object.fromEntries(versions),
1245
1150
  client: "js:hono"
1246
1151
  };
1247
- }, "getAppInfo");
1248
- var listEndpoints = /* @__PURE__ */ __name((app) => {
1152
+ }
1153
+ __name(getAppInfo, "getAppInfo");
1154
+ function listEndpoints(app) {
1249
1155
  const endpoints = [];
1250
1156
  app.routes.forEach((route) => {
1251
1157
  if (route.method !== "ALL" && !isMiddleware(route.handler)) {
@@ -1256,8 +1162,137 @@ var listEndpoints = /* @__PURE__ */ __name((app) => {
1256
1162
  }
1257
1163
  });
1258
1164
  return endpoints;
1259
- }, "listEndpoints");
1165
+ }
1166
+ __name(listEndpoints, "listEndpoints");
1167
+ function extractZodErrors(responseJson) {
1168
+ var _a2;
1169
+ const errors = [];
1170
+ if (responseJson && responseJson.success === false && responseJson.error && responseJson.error.name === "ZodError") {
1171
+ const zodError = responseJson.error;
1172
+ (_a2 = zodError.issues) == null ? void 0 : _a2.forEach((zodIssue) => {
1173
+ errors.push({
1174
+ loc: zodIssue.path.join("."),
1175
+ msg: zodIssue.message,
1176
+ type: zodIssue.code
1177
+ });
1178
+ });
1179
+ }
1180
+ return errors;
1181
+ }
1182
+ __name(extractZodErrors, "extractZodErrors");
1183
+
1184
+ // src/hono/middleware.ts
1185
+ function useApitally(app, config) {
1186
+ const client = new ApitallyClient(config);
1187
+ const middleware = getMiddleware(client);
1188
+ app.use(middleware);
1189
+ const setStartupData = /* @__PURE__ */ __name((attempt = 1) => {
1190
+ const appInfo = getAppInfo(app, config.appVersion);
1191
+ if (appInfo.paths.length > 0 || attempt >= 10) {
1192
+ client.setStartupData(appInfo);
1193
+ } else {
1194
+ setTimeout(() => setStartupData(attempt + 1), 500);
1195
+ }
1196
+ }, "setStartupData");
1197
+ setTimeout(() => setStartupData(), 500);
1198
+ }
1199
+ __name(useApitally, "useApitally");
1200
+ function getMiddleware(client) {
1201
+ return async (c, next) => {
1202
+ if (!client.isEnabled()) {
1203
+ await next();
1204
+ return;
1205
+ }
1206
+ const timestamp = Date.now() / 1e3;
1207
+ const startTime = performance.now();
1208
+ await next();
1209
+ let response;
1210
+ const responseTime = performance.now() - startTime;
1211
+ const [responseSize, newResponse] = await measureResponseSize(c.res);
1212
+ const requestSize = parseContentLength(c.req.header("content-length"));
1213
+ const consumer = getConsumer(c);
1214
+ client.consumerRegistry.addOrUpdateConsumer(consumer);
1215
+ client.requestCounter.addRequest({
1216
+ consumer: consumer == null ? void 0 : consumer.identifier,
1217
+ method: c.req.method,
1218
+ path: c.req.routePath,
1219
+ statusCode: c.res.status,
1220
+ responseTime,
1221
+ requestSize,
1222
+ responseSize
1223
+ });
1224
+ response = newResponse;
1225
+ if (c.res.status === 400) {
1226
+ const [responseJson, newResponse2] = await getResponseJson(response);
1227
+ const validationErrors = extractZodErrors(responseJson);
1228
+ validationErrors.forEach((error) => {
1229
+ client.validationErrorCounter.addValidationError({
1230
+ consumer: consumer == null ? void 0 : consumer.identifier,
1231
+ method: c.req.method,
1232
+ path: c.req.routePath,
1233
+ ...error
1234
+ });
1235
+ });
1236
+ response = newResponse2;
1237
+ }
1238
+ if (c.error) {
1239
+ client.serverErrorCounter.addServerError({
1240
+ consumer: consumer == null ? void 0 : consumer.identifier,
1241
+ method: c.req.method,
1242
+ path: c.req.routePath,
1243
+ type: c.error.name,
1244
+ msg: c.error.message,
1245
+ traceback: c.error.stack || ""
1246
+ });
1247
+ }
1248
+ if (client.requestLogger.enabled) {
1249
+ let requestBody;
1250
+ let responseBody;
1251
+ let newResponse2 = response;
1252
+ const requestContentType = c.req.header("content-type");
1253
+ const responseContentType = c.res.headers.get("content-type");
1254
+ if (client.requestLogger.config.logRequestBody && client.requestLogger.isSupportedContentType(requestContentType)) {
1255
+ requestBody = Buffer.from(await c.req.arrayBuffer());
1256
+ }
1257
+ if (client.requestLogger.config.logResponseBody && client.requestLogger.isSupportedContentType(responseContentType)) {
1258
+ [responseBody, newResponse2] = await getResponseBody(response);
1259
+ response = newResponse2;
1260
+ }
1261
+ client.requestLogger.logRequest({
1262
+ timestamp,
1263
+ method: c.req.method,
1264
+ path: c.req.routePath,
1265
+ url: c.req.url,
1266
+ headers: convertHeaders(c.req.header()),
1267
+ size: Number(requestSize),
1268
+ consumer: consumer == null ? void 0 : consumer.identifier,
1269
+ body: requestBody
1270
+ }, {
1271
+ statusCode: c.res.status,
1272
+ responseTime: responseTime / 1e3,
1273
+ headers: convertHeaders(c.res.headers),
1274
+ size: responseSize,
1275
+ body: responseBody
1276
+ }, c.error);
1277
+ }
1278
+ c.res = response;
1279
+ };
1280
+ }
1281
+ __name(getMiddleware, "getMiddleware");
1282
+ function setConsumer(c, consumer) {
1283
+ c.set("apitallyConsumer", consumer || void 0);
1284
+ }
1285
+ __name(setConsumer, "setConsumer");
1286
+ function getConsumer(c) {
1287
+ const consumer = c.get("apitallyConsumer");
1288
+ if (consumer) {
1289
+ return consumerFromStringOrObject(consumer);
1290
+ }
1291
+ return null;
1292
+ }
1293
+ __name(getConsumer, "getConsumer");
1260
1294
  export {
1295
+ setConsumer,
1261
1296
  useApitally
1262
1297
  };
1263
1298
  //# sourceMappingURL=middleware.js.map