@gomcp/analytics 0.1.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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +231 -0
  3. package/dist/analytics.d.ts +68 -0
  4. package/dist/analytics.d.ts.map +1 -0
  5. package/dist/analytics.js +113 -0
  6. package/dist/analytics.js.map +1 -0
  7. package/dist/collector.d.ts +44 -0
  8. package/dist/collector.d.ts.map +1 -0
  9. package/dist/collector.js +132 -0
  10. package/dist/collector.js.map +1 -0
  11. package/dist/exporters/console.d.ts +6 -0
  12. package/dist/exporters/console.d.ts.map +1 -0
  13. package/dist/exporters/console.js +18 -0
  14. package/dist/exporters/console.js.map +1 -0
  15. package/dist/exporters/custom.d.ts +7 -0
  16. package/dist/exporters/custom.d.ts.map +1 -0
  17. package/dist/exporters/custom.js +15 -0
  18. package/dist/exporters/custom.js.map +1 -0
  19. package/dist/exporters/json.d.ts +6 -0
  20. package/dist/exporters/json.d.ts.map +1 -0
  21. package/dist/exporters/json.js +13 -0
  22. package/dist/exporters/json.js.map +1 -0
  23. package/dist/exporters/otlp.d.ts +9 -0
  24. package/dist/exporters/otlp.d.ts.map +1 -0
  25. package/dist/exporters/otlp.js +83 -0
  26. package/dist/exporters/otlp.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/middleware.d.ts +14 -0
  32. package/dist/middleware.d.ts.map +1 -0
  33. package/dist/middleware.js +184 -0
  34. package/dist/middleware.js.map +1 -0
  35. package/dist/tracing.d.ts +37 -0
  36. package/dist/tracing.d.ts.map +1 -0
  37. package/dist/tracing.js +67 -0
  38. package/dist/tracing.js.map +1 -0
  39. package/dist/types.d.ts +98 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +2 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/utils.d.ts +14 -0
  44. package/dist/utils.d.ts.map +1 -0
  45. package/dist/utils.js +44 -0
  46. package/dist/utils.js.map +1 -0
  47. package/package.json +70 -0
package/dist/utils.js ADDED
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Returns the byte length of a string (UTF-8).
3
+ */
4
+ export function byteSize(value) {
5
+ if (value === undefined || value === null)
6
+ return 0;
7
+ const str = typeof value === "string" ? value : JSON.stringify(value);
8
+ return new TextEncoder().encode(str).byteLength;
9
+ }
10
+ /**
11
+ * Compute a percentile from a sorted array of numbers.
12
+ * Uses linear interpolation between the closest ranks.
13
+ */
14
+ export function percentile(sorted, p) {
15
+ if (sorted.length === 0)
16
+ return 0;
17
+ if (sorted.length === 1)
18
+ return sorted[0];
19
+ const index = (p / 100) * (sorted.length - 1);
20
+ const lower = Math.floor(index);
21
+ const upper = Math.ceil(index);
22
+ if (lower === upper)
23
+ return sorted[lower];
24
+ const weight = index - lower;
25
+ return sorted[lower] * (1 - weight) + sorted[upper] * weight;
26
+ }
27
+ /**
28
+ * Insert a value into an already-sorted array (ascending), maintaining sort order.
29
+ */
30
+ export function sortedInsert(arr, value) {
31
+ let lo = 0;
32
+ let hi = arr.length;
33
+ while (lo < hi) {
34
+ const mid = (lo + hi) >>> 1;
35
+ if (arr[mid] < value) {
36
+ lo = mid + 1;
37
+ }
38
+ else {
39
+ hi = mid;
40
+ }
41
+ }
42
+ arr.splice(lo, 0, value);
43
+ }
44
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAgB,EAAE,CAAS;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE/B,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAa,EAAE,KAAa;IACvD,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACpB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;YACrB,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,EAAE,GAAG,GAAG,CAAC;QACX,CAAC;IACH,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@gomcp/analytics",
3
+ "version": "0.1.0",
4
+ "description": "Lightweight analytics and observability for MCP servers",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "sideEffects": false,
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "prepublishOnly": "npm run build"
24
+ },
25
+ "keywords": [
26
+ "mcp",
27
+ "model-context-protocol",
28
+ "analytics",
29
+ "observability",
30
+ "opentelemetry"
31
+ ],
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/aallam/gomcp.git",
36
+ "directory": "packages/analytics"
37
+ },
38
+ "homepage": "https://github.com/aallam/gomcp/tree/main/packages/analytics#readme",
39
+ "bugs": "https://github.com/aallam/gomcp/issues",
40
+ "engines": {
41
+ "node": ">=18.0.0"
42
+ },
43
+ "peerDependencies": {
44
+ "@modelcontextprotocol/sdk": "^1.0.0",
45
+ "@opentelemetry/api": "^1.0.0",
46
+ "@opentelemetry/sdk-trace-base": "^2.0.0",
47
+ "@opentelemetry/exporter-trace-otlp-http": ">=0.200.0"
48
+ },
49
+ "peerDependenciesMeta": {
50
+ "@modelcontextprotocol/sdk": {
51
+ "optional": false
52
+ },
53
+ "@opentelemetry/api": {
54
+ "optional": true
55
+ },
56
+ "@opentelemetry/sdk-trace-base": {
57
+ "optional": true
58
+ },
59
+ "@opentelemetry/exporter-trace-otlp-http": {
60
+ "optional": true
61
+ }
62
+ },
63
+ "devDependencies": {
64
+ "@modelcontextprotocol/sdk": "^1.12.1",
65
+ "@opentelemetry/api": "^1.9.0",
66
+ "@opentelemetry/exporter-trace-otlp-http": "^0.211.0",
67
+ "@opentelemetry/sdk-trace-base": "^2.5.0",
68
+ "typescript": "^5.7.0"
69
+ }
70
+ }