@0xchain/telemetry 1.1.0-beta.9 → 1.1.0-beta.91

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.
package/dist/next.js ADDED
@@ -0,0 +1,43 @@
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { c as createIgnoreMatcher } from "./ignore-BvHZTNsF.js";
3
+ const defaultTelemetryMiddlewareConfig = {
4
+ matcher: [
5
+ "/((?!_next/static|_next/image|favicon.ico|robots.txt|sitemap.xml|.*\\.(?:css|js|mjs|cjs|png|jpg|jpeg|gif|svg|ico|webp|avif|woff|woff2|ttf|eot|map|txt|xml)).*)"
6
+ ]
7
+ };
8
+ const withTelemetryMiddleware = (middleware, options = {}) => {
9
+ const shouldIgnore = createIgnoreMatcher(options.ignore);
10
+ const requestStartHeader = (options.requestStartHeader ?? "x-telemetry-start").toLowerCase();
11
+ const userTypeHeader = (options.userTypeHeader ?? "x-telemetry-user-type").toLowerCase();
12
+ const resolveUserType = options.resolveUserType;
13
+ return async (request, event) => {
14
+ const pathname = request.nextUrl.pathname;
15
+ if (shouldIgnore(pathname, request.method)) {
16
+ return middleware(request, event);
17
+ }
18
+ const headers = new Headers(request.headers);
19
+ const userType = resolveUserType?.(request) || headers.get(userTypeHeader);
20
+ if (userType) headers.set(userTypeHeader, userType);
21
+ headers.set(requestStartHeader, String(Date.now()));
22
+ const wrappedRequest = new NextRequest(request, {
23
+ headers
24
+ });
25
+ const response = await middleware(wrappedRequest, event);
26
+ if (!response) {
27
+ return NextResponse.next({
28
+ request: {
29
+ headers
30
+ }
31
+ });
32
+ }
33
+ return response;
34
+ };
35
+ };
36
+ const createTelemetryMiddleware = (options = {}) => {
37
+ return withTelemetryMiddleware(() => NextResponse.next(), options);
38
+ };
39
+ export {
40
+ createTelemetryMiddleware,
41
+ defaultTelemetryMiddlewareConfig,
42
+ withTelemetryMiddleware
43
+ };
package/dist/types.d.ts CHANGED
@@ -4,6 +4,8 @@ export interface IgnoreConfig {
4
4
  paths?: PathPattern[];
5
5
  extensions?: string[];
6
6
  methods?: string[];
7
+ /** 需要忽略的 span 名称模式(用于过滤 Next.js 内部 span 等非 HTTP 请求) */
8
+ spanNames?: PathPattern[];
7
9
  }
8
10
  export interface SamplingRuleCondition {
9
11
  path?: PathPattern[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,eAAgB,SAAQ,0BAA0B;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,eAAe,CAAC;IACjC,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,aAAa,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC;CACtF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,uDAAuD;IACvD,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,eAAgB,SAAQ,0BAA0B;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,eAAe,CAAC;IACjC,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,aAAa,EAAE,WAAW,KAAK,MAAM,GAAG,SAAS,CAAC;CACtF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xchain/telemetry",
3
- "version": "1.1.0-beta.9",
3
+ "version": "1.1.0-beta.91",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -15,16 +15,19 @@
15
15
  "./middleware": {
16
16
  "types": "./dist/middleware.d.ts",
17
17
  "import": "./dist/middleware.js",
18
+ "require": "./dist/middleware.js",
18
19
  "default": "./dist/middleware.js"
19
20
  },
20
21
  "./instrumentation": {
21
22
  "types": "./dist/instrumentation.d.ts",
22
23
  "import": "./dist/instrumentation.js",
24
+ "require": "./dist/instrumentation.js",
23
25
  "default": "./dist/instrumentation.js"
24
26
  },
25
27
  "./next": {
26
28
  "types": "./dist/next.d.ts",
27
29
  "import": "./dist/next.js",
30
+ "require": "./dist/next.js",
28
31
  "default": "./dist/next.js"
29
32
  }
30
33
  },
@@ -32,18 +35,35 @@
32
35
  "dist",
33
36
  "!**/*.tsbuildinfo"
34
37
  ],
35
- "dependencies": {
38
+ "peerDependencies": {
36
39
  "@opentelemetry/api": "1.9.0",
37
- "@opentelemetry/instrumentation-http": "0.211.0",
38
- "@opentelemetry/exporter-trace-otlp-http": "0.211.0",
39
- "@opentelemetry/instrumentation-undici": "0.21.0",
40
- "@opentelemetry/otlp-exporter-base": "0.211.0",
41
- "@opentelemetry/resources": "2.5.0",
42
- "@opentelemetry/sdk-node": "0.211.0",
43
- "@opentelemetry/sdk-trace-base": "2.5.0",
44
- "@opentelemetry/semantic-conventions": "1.39.0",
40
+ "@opentelemetry/exporter-trace-otlp-http": "0.212.0",
41
+ "@opentelemetry/instrumentation-http": "0.212.0",
42
+ "@opentelemetry/instrumentation-undici": "0.22.0",
43
+ "@opentelemetry/otlp-exporter-base": "0.212.0",
44
+ "@opentelemetry/resources": "2.5.1",
45
+ "@opentelemetry/sdk-node": "0.212.0",
46
+ "@opentelemetry/sdk-trace-base": "2.5.1",
47
+ "@opentelemetry/semantic-conventions": "1.40.0",
45
48
  "next": "16.1.6"
46
49
  },
50
+ "devDependencies": {
51
+ "@opentelemetry/api": "1.9.0",
52
+ "@opentelemetry/exporter-trace-otlp-http": "0.212.0",
53
+ "@opentelemetry/instrumentation-http": "0.212.0",
54
+ "@opentelemetry/instrumentation-undici": "0.22.0",
55
+ "@opentelemetry/otlp-exporter-base": "0.212.0",
56
+ "@opentelemetry/resources": "2.5.1",
57
+ "@opentelemetry/sdk-node": "0.212.0",
58
+ "@opentelemetry/sdk-trace-base": "2.5.1",
59
+ "@opentelemetry/semantic-conventions": "1.40.0",
60
+ "next": "16.1.6"
61
+ },
62
+ "nx": {
63
+ "tags": [
64
+ "type:util"
65
+ ]
66
+ },
47
67
  "publishConfig": {
48
68
  "access": "public"
49
69
  }
@@ -1,80 +0,0 @@
1
- const d = [
2
- "/health",
3
- "/api/health",
4
- "/metrics",
5
- "/readyz",
6
- "/livez",
7
- "/favicon.ico",
8
- "/robots.txt",
9
- "/sitemap.xml",
10
- "/_next",
11
- "/__nextjs_",
12
- "/.well-known"
13
- ], m = [
14
- ".css",
15
- ".js",
16
- ".mjs",
17
- ".cjs",
18
- ".png",
19
- ".jpg",
20
- ".jpeg",
21
- ".gif",
22
- ".svg",
23
- ".ico",
24
- ".webp",
25
- ".avif",
26
- ".woff",
27
- ".woff2",
28
- ".ttf",
29
- ".eot",
30
- ".map",
31
- ".txt",
32
- ".xml"
33
- ], i = {
34
- paths: d,
35
- extensions: m,
36
- methods: ["HEAD", "OPTIONS"]
37
- }, f = (e) => e.map((s) => {
38
- const t = s.trim().toLowerCase();
39
- return t && (t.startsWith(".") ? t : `.${t}`);
40
- }), w = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), C = (e, s) => {
41
- if (e instanceof RegExp)
42
- return e.test(s);
43
- const t = e.trim();
44
- if (!t) return !1;
45
- if (t.includes("*")) {
46
- const a = `^${w(t).replace(/\\\*\\\*/g, ".*").replace(/\\\*/g, "[^/]*")}$`;
47
- return new RegExp(a).test(s);
48
- }
49
- return s === t ? !0 : t.endsWith("/") ? s.startsWith(t) : s.startsWith(`${t}/`) || s.startsWith(t);
50
- }, E = (e, s) => {
51
- const t = s.toLowerCase();
52
- return e.some((o) => o && t.endsWith(o));
53
- }, j = (e) => {
54
- var a;
55
- if (!e) return "default";
56
- if ((a = e.paths) == null ? void 0 : a.some((n) => n instanceof RegExp)) return null;
57
- const t = (e.paths ?? []).map(String).sort().join(","), o = (e.extensions ?? []).map((n) => n.toLowerCase()).sort().join(","), h = (e.methods ?? []).map((n) => n.toUpperCase()).sort().join(",");
58
- return `p:${t}|e:${o}|m:${h}`;
59
- }, c = /* @__PURE__ */ new Map(), $ = 16, I = (e) => {
60
- var n, l, p;
61
- const s = j(e);
62
- if (s) {
63
- const r = c.get(s);
64
- if (r) return r;
65
- }
66
- const t = (n = e == null ? void 0 : e.paths) != null && n.length ? e.paths : i.paths, o = (l = e == null ? void 0 : e.extensions) != null && l.length ? f(e.extensions) : i.extensions, h = (p = e == null ? void 0 : e.methods) != null && p.length ? e.methods.map((r) => r.toUpperCase()) : i.methods, a = (r, u) => u && h.includes(u.toUpperCase()) ? !0 : r ? E(o, r) ? !0 : t.some((x) => C(x, r)) : !1;
67
- if (s) {
68
- if (c.size >= $) {
69
- const r = c.keys().next().value;
70
- r && c.delete(r);
71
- }
72
- c.set(s, a);
73
- }
74
- return a;
75
- };
76
- export {
77
- I as c,
78
- i as d,
79
- C as m
80
- };
package/dist/index DELETED
@@ -1,355 +0,0 @@
1
- import { NodeSDK as b } from "@opentelemetry/sdk-node";
2
- import { OTLPTraceExporter as v } from "@opentelemetry/exporter-trace-otlp-http";
3
- import { resourceFromAttributes as Y } from "@opentelemetry/resources";
4
- import { ATTR_SERVICE_VERSION as F, ATTR_SERVICE_NAME as q } from "@opentelemetry/semantic-conventions";
5
- import { SamplingDecision as d, TraceIdRatioBasedSampler as N, AlwaysOnSampler as U, BatchSpanProcessor as z } from "@opentelemetry/sdk-trace-base";
6
- import { trace as B, TraceFlags as M, propagation as I, context as V, SpanStatusCode as G } from "@opentelemetry/api";
7
- import { readFile as k } from "node:fs/promises";
8
- import { HttpInstrumentation as j } from "@opentelemetry/instrumentation-http";
9
- import { UndiciInstrumentation as Q } from "@opentelemetry/instrumentation-undici";
10
- import { c as X, m as W, d as J } from "./ignore-B1KXtl12.js";
11
- const K = "deployment.environment.name", f = (t, e) => {
12
- if (!t) return;
13
- const r = t[e.toLowerCase()];
14
- if (Array.isArray(r)) {
15
- const n = r[0];
16
- return typeof n == "string" ? n : void 0;
17
- }
18
- return typeof r == "string" ? r : void 0;
19
- }, T = (t) => {
20
- if (!t) return "";
21
- try {
22
- return t.startsWith("http://") || t.startsWith("https://") ? new URL(t).pathname : new URL(t, "http://localhost").pathname;
23
- } catch {
24
- return t.split("?")[0] || t;
25
- }
26
- }, w = /* @__PURE__ */ new WeakMap();
27
- function $(t) {
28
- const e = X(t.ignore), r = (t.inspectionHeader ?? "x-inspection").toLowerCase(), n = (t.userTypeHeader ?? "x-telemetry-user-type").toLowerCase(), o = (t.requestStartHeader ?? "x-telemetry-start").toLowerCase();
29
- return [
30
- new j({
31
- startIncomingSpanHook: (s) => {
32
- const i = "headers" in s ? s.headers : void 0, a = f(i, r), c = f(i, n), u = f(i, o), l = "method" in s ? s.method : void 0, C = T("url" in s ? s.url : void 0), L = Number(u || Date.now()), m = {
33
- "telemetry.request.start_time_ms": Number.isFinite(L) ? L : Date.now()
34
- };
35
- return C && (m["url.path"] = C), l && (m["http.request.method"] = l), a && (m["telemetry.request.inspection"] = !0, m["http.request.header.x-inspection"] = a), c && (m["enduser.type"] = c, m["telemetry.request.user_type"] = c), m;
36
- },
37
- requestHook: (s, i) => {
38
- const a = "headers" in i ? i.headers : void 0, c = f(a, o), u = Number(c || Date.now());
39
- w.set(s, Number.isFinite(u) ? u : Date.now());
40
- },
41
- responseHook: (s, i) => {
42
- const a = "statusCode" in i ? i.statusCode : void 0;
43
- typeof a == "number" && (s.setAttribute("http.response.status_code", a), s.setAttribute("telemetry.response.status_code", a), a >= 500 && s.setAttribute("telemetry.request.error", !0));
44
- const c = w.get(s);
45
- typeof c == "number" && s.setAttribute("telemetry.request.duration_ms", Date.now() - c);
46
- },
47
- ignoreIncomingRequestHook: (s) => {
48
- const i = "url" in s ? s.url : void 0, a = T(i), c = "method" in s ? s.method : void 0;
49
- return e(a, c);
50
- },
51
- ignoreOutgoingRequestHook: (s) => {
52
- const i = typeof s == "string" ? s : s.path || "";
53
- return e(T(i));
54
- }
55
- }),
56
- new Q()
57
- ];
58
- }
59
- const R = (t) => {
60
- if (typeof t == "string") return t;
61
- if (Array.isArray(t)) {
62
- const e = t[0];
63
- return typeof e == "string" ? e : void 0;
64
- }
65
- }, x = (t) => {
66
- if (typeof t == "number") return t;
67
- if (typeof t == "string") {
68
- const e = Number(t);
69
- return Number.isFinite(e) ? e : void 0;
70
- }
71
- if (Array.isArray(t)) {
72
- const e = t[0];
73
- return x(e);
74
- }
75
- }, E = (t, e) => {
76
- for (const r of e)
77
- if (r in t)
78
- return t[r];
79
- }, Z = (t) => {
80
- const e = E(t, ["url.path", "http.target", "http.route"]), r = E(t, ["http.request.method", "http.method"]), n = E(t, ["enduser.type", "telemetry.request.user_type"]), o = E(t, [
81
- "http.response.status_code",
82
- "http.status_code",
83
- "telemetry.response.status_code"
84
- ]), s = E(t, [
85
- "telemetry.request.inspection",
86
- "http.request.header.x-inspection",
87
- "x-inspection"
88
- ]), i = s === !0 || s === "true" || s === "1" || s === 1;
89
- return {
90
- path: R(e),
91
- method: R(r),
92
- userType: R(n),
93
- statusCode: x(o),
94
- inspection: i
95
- };
96
- }, O = (t, e) => !t || !(e != null && e.length) ? !1 : e.some((r) => r.toLowerCase() === t.toLowerCase()), tt = (t, e) => !t || !(e != null && e.length) ? !1 : e.some((r) => W(r, t)), et = (t, e) => {
97
- const r = t.when;
98
- if (!r) return !0;
99
- if (r.inspection !== void 0 && r.inspection !== e.inspection || r.path && !tt(e.path, r.path) || r.method && !O(e.method, r.method) || r.userType && !O(e.userType, r.userType))
100
- return !1;
101
- if (r.statusCode && typeof e.statusCode == "number") {
102
- if (!r.statusCode.includes(e.statusCode))
103
- return !1;
104
- } else if (r.statusCode && r.statusCode.length)
105
- return !1;
106
- return !(typeof r.minStatusCode == "number" && (typeof e.statusCode != "number" || e.statusCode < r.minStatusCode) || typeof r.maxStatusCode == "number" && (typeof e.statusCode != "number" || e.statusCode > r.maxStatusCode));
107
- }, _ = (t) => Math.max(0, Math.min(1, t)), rt = (t, e, r) => {
108
- if (!(t != null && t.length)) return _(r);
109
- for (const n of t)
110
- if (et(n, e))
111
- return _(n.ratio);
112
- return _(r);
113
- }, A = /* @__PURE__ */ new Map(), nt = (t) => {
114
- if (t <= 0)
115
- return new N(0);
116
- if (t >= 1)
117
- return new U();
118
- const e = Number(t.toFixed(6)), r = A.get(e);
119
- if (r) return r;
120
- const n = new N(e);
121
- return A.set(e, n), n;
122
- }, st = (t) => ({
123
- shouldSample(e, r, n, o, s, i) {
124
- const a = B.getSpanContext(e);
125
- if (a)
126
- return (a.traceFlags & M.SAMPLED) === M.SAMPLED ? { decision: d.RECORD_AND_SAMPLED } : { decision: d.NOT_RECORD };
127
- const c = t.getConfig(), u = Z(s);
128
- if (u.inspection)
129
- return { decision: d.RECORD_AND_SAMPLED };
130
- const l = rt(
131
- c.samplingRules,
132
- u,
133
- c.defaultSamplingRatio ?? 0.01
134
- );
135
- return nt(l).shouldSample(e, r, n, o, s, i);
136
- },
137
- toString: () => "RuleBasedSampler"
138
- }), ot = (t) => t;
139
- let h, p;
140
- const g = (t) => Array.from(new Set(t)), S = (t) => (t == null ? void 0 : t.split(",").map((e) => e.trim()).filter(Boolean)) ?? [], it = (t) => {
141
- if (!t) return;
142
- const e = {};
143
- for (const r of t.split(",")) {
144
- const [n, ...o] = r.split("="), s = n == null ? void 0 : n.trim();
145
- s && (e[s] = o.join("=").trim());
146
- }
147
- return e;
148
- }, y = (t) => {
149
- if (t)
150
- try {
151
- return JSON.parse(t);
152
- } catch {
153
- return;
154
- }
155
- }, at = async (t) => {
156
- if (t)
157
- try {
158
- const e = await k(t, "utf8");
159
- return y(e);
160
- } catch {
161
- return;
162
- }
163
- }, H = (t, e) => {
164
- const r = g([...(t == null ? void 0 : t.paths) ?? [], ...(e == null ? void 0 : e.paths) ?? []]), n = g([
165
- ...(t == null ? void 0 : t.extensions) ?? [],
166
- ...(e == null ? void 0 : e.extensions) ?? []
167
- ]), o = g([...(t == null ? void 0 : t.methods) ?? [], ...(e == null ? void 0 : e.methods) ?? []]);
168
- return {
169
- paths: r.length ? r : void 0,
170
- extensions: n.length ? n : void 0,
171
- methods: o.length ? o : void 0
172
- };
173
- }, ct = (t) => {
174
- if (t != null && t.length)
175
- return t.map((e) => ({
176
- ...e,
177
- ratio: Number.isFinite(e.ratio) ? Math.max(0, Math.min(1, e.ratio)) : 0
178
- })).filter((e) => e.ratio >= 0);
179
- }, ut = async (t = process.env) => {
180
- const e = await at(t.TELEMETRY_CONFIG_FILE), r = S(t.TELEMETRY_IGNORE_PATHS), n = S(t.TELEMETRY_IGNORE_EXTENSIONS), o = S(t.TELEMETRY_IGNORE_METHODS), s = y(t.TELEMETRY_SAMPLING_RULES), i = typeof (e == null ? void 0 : e.samplingRules) == "string" ? y(e.samplingRules) : e == null ? void 0 : e.samplingRules, a = {
181
- serviceName: t.OTEL_SERVICE_NAME || t.TELEMETRY_SERVICE_NAME,
182
- serviceVersion: t.OTEL_SERVICE_VERSION || t.TELEMETRY_SERVICE_VERSION,
183
- environment: t.OTEL_RESOURCE_ATTRIBUTES || t.TELEMETRY_ENVIRONMENT || (t.VERCEL ? t.VERCEL_ENV : void 0),
184
- defaultSamplingRatio: t.TELEMETRY_SAMPLING_RATIO ? Number(t.TELEMETRY_SAMPLING_RATIO) : void 0,
185
- url: t.OTEL_EXPORTER_OTLP_ENDPOINT || t.TELEMETRY_OTLP_ENDPOINT,
186
- headers: it(t.OTEL_EXPORTER_OTLP_HEADERS || t.TELEMETRY_OTLP_HEADERS),
187
- inspectionHeader: t.TELEMETRY_INSPECTION_HEADER,
188
- userTypeHeader: t.TELEMETRY_USER_TYPE_HEADER,
189
- requestStartHeader: t.TELEMETRY_REQUEST_START_HEADER,
190
- samplingRules: s || i,
191
- ignore: r.length || n.length || o.length ? {
192
- paths: r.length ? r : void 0,
193
- extensions: n.length ? n : void 0,
194
- methods: o.length ? o : void 0
195
- } : void 0
196
- };
197
- return e && typeof e == "object" ? { ...e, ...a } : a;
198
- }, mt = (t) => {
199
- if (!t) return process.env.NODE_ENV || "development";
200
- if (t.includes("deployment.environment")) {
201
- const r = t.split(",").find((o) => o.includes("deployment.environment"));
202
- if (!r) return t;
203
- const [, n] = r.split("=");
204
- return (n == null ? void 0 : n.trim()) || t;
205
- }
206
- return t;
207
- }, pt = (t, e) => {
208
- var n, o;
209
- const r = [
210
- { name: "inspection", ratio: 1, when: { inspection: !0 } },
211
- { name: "error", ratio: 1, when: { minStatusCode: 500 } }
212
- ];
213
- if ((n = t == null ? void 0 : t.criticalPaths) != null && n.length && r.push({
214
- name: "critical-path",
215
- ratio: 1,
216
- when: { path: t.criticalPaths }
217
- }), (o = t == null ? void 0 : t.criticalUserTypes) != null && o.length && r.push({
218
- name: "critical-user",
219
- ratio: 1,
220
- when: { userType: t.criticalUserTypes }
221
- }), t != null && t.pathSampling)
222
- for (const [s, i] of Object.entries(t.pathSampling))
223
- r.push({
224
- name: `path:${s}`,
225
- ratio: i,
226
- when: { path: [s] }
227
- });
228
- if (t != null && t.userTypeSampling)
229
- for (const [s, i] of Object.entries(t.userTypeSampling))
230
- r.push({
231
- name: `user:${s}`,
232
- ratio: i,
233
- when: { userType: [s] }
234
- });
235
- return r.push({ name: "default", ratio: e }), r;
236
- }, D = (t) => {
237
- const e = mt(t.environment), r = H(J, t.ignore), n = typeof t.defaultSamplingRatio == "number" ? Math.max(0, Math.min(1, t.defaultSamplingRatio)) : 0.01, o = ct(t.samplingRules) ?? pt(t.layeredSampling, n);
238
- return {
239
- ...t,
240
- serviceName: t.serviceName || "unknown-service",
241
- serviceVersion: t.serviceVersion,
242
- environment: e,
243
- defaultSamplingRatio: n,
244
- ignore: r,
245
- samplingRules: o,
246
- inspectionHeader: t.inspectionHeader ?? "x-inspection",
247
- userTypeHeader: t.userTypeHeader ?? "x-telemetry-user-type",
248
- requestStartHeader: t.requestStartHeader ?? "x-telemetry-start",
249
- scheduledDelayMillis: t.scheduledDelayMillis ?? 1e3,
250
- maxQueueSize: t.maxQueueSize ?? 2048,
251
- maxExportBatchSize: t.maxExportBatchSize ?? 512,
252
- exporterTimeoutMillis: t.exporterTimeoutMillis ?? 3e4
253
- };
254
- }, P = async (t = {}, e = process.env) => {
255
- const r = await ut(e);
256
- return D({ ...r, ...t });
257
- }, Et = async (t) => {
258
- let e = await P(t);
259
- return {
260
- getConfig: () => e,
261
- updateConfig: (r) => {
262
- e = D({
263
- ...e,
264
- ...r,
265
- ignore: H(e.ignore, r.ignore)
266
- });
267
- }
268
- };
269
- }, lt = (t) => t[0] * 1e3 + t[1] / 1e6, ft = (t, e) => {
270
- for (const r of e) {
271
- const n = t.attributes[r];
272
- if (typeof n == "number") return n;
273
- }
274
- }, ht = (t) => {
275
- const e = t.events.find((n) => n.name === "exception");
276
- if (!(e != null && e.attributes)) return;
277
- const r = e.attributes["exception.message"];
278
- return typeof r == "string" ? r : void 0;
279
- }, dt = () => ({
280
- onStart: () => {
281
- },
282
- onEnd: (t) => {
283
- const e = lt(t.duration);
284
- t.attributes["telemetry.request.duration_ms"] = Math.round(e), typeof t.attributes["telemetry.request.start_time_ms"] != "number" && (t.attributes["telemetry.request.start_time_ms"] = Date.now() - Math.round(e));
285
- const r = ft(t, [
286
- "http.response.status_code",
287
- "http.status_code",
288
- "telemetry.response.status_code"
289
- ]);
290
- if (typeof r == "number" && (t.attributes["telemetry.response.status_code"] = r), t.status.code === G.ERROR || typeof r == "number" && r >= 500) {
291
- t.attributes["telemetry.request.error"] = !0;
292
- const o = t.status.message || ht(t);
293
- o && (t.attributes["telemetry.request.error_message"] = o);
294
- }
295
- },
296
- shutdown: () => Promise.resolve(),
297
- forceFlush: () => Promise.resolve()
298
- }), wt = async (t) => {
299
- const e = await P(t);
300
- p = await Et(e);
301
- const r = process.env, n = {
302
- [q]: e.serviceName,
303
- [F]: e.serviceVersion || "1.0.0",
304
- [K]: e.environment || r.VERCEL_ENV || r.NODE_ENV || "development"
305
- };
306
- r.VERCEL && (r.VERCEL_REGION && (n["vercel.region"] = r.VERCEL_REGION), r.NEXT_RUNTIME && (n["vercel.runtime"] = r.NEXT_RUNTIME), r.VERCEL_GIT_COMMIT_SHA && (n["vercel.sha"] = r.VERCEL_GIT_COMMIT_SHA), r.VERCEL_URL && (n["vercel.host"] = r.VERCEL_URL), r.VERCEL_BRANCH_URL && (n["vercel.branch_host"] = r.VERCEL_BRANCH_URL), r.VERCEL_DEPLOYMENT_ID && (n["vercel.deployment_id"] = r.VERCEL_DEPLOYMENT_ID));
307
- const o = Y(n), s = new v(e), i = ot(s), a = [
308
- dt(),
309
- new z(i, {
310
- scheduledDelayMillis: e.scheduledDelayMillis,
311
- maxQueueSize: e.maxQueueSize,
312
- maxExportBatchSize: e.maxExportBatchSize,
313
- exportTimeoutMillis: e.exporterTimeoutMillis
314
- })
315
- ];
316
- h = new b({
317
- serviceName: e.serviceName,
318
- resource: o,
319
- spanProcessors: a,
320
- sampler: st(p),
321
- instrumentations: $(e)
322
- });
323
- try {
324
- await h.start();
325
- } catch (c) {
326
- console.warn("Telemetry start failed:", c);
327
- }
328
- return p;
329
- }, Ot = (t) => {
330
- p == null || p.updateConfig(t);
331
- }, At = (t) => (I.inject(V.active(), t), t), It = (t = fetch) => async (e, r) => {
332
- const n = (r == null ? void 0 : r.headers) ?? (e instanceof Request ? e.headers : void 0), o = new Headers(n);
333
- return I.inject(V.active(), o, {
334
- set: (s, i, a) => {
335
- s.set(i, a);
336
- }
337
- }), t(e, { ...r, headers: o });
338
- }, Vt = async () => {
339
- h && await h.shutdown();
340
- };
341
- export {
342
- Z as buildSamplingContextFromAttributes,
343
- X as createIgnoreMatcher,
344
- It as createPropagatingFetch,
345
- Et as createTelemetryRuntime,
346
- J as defaultIgnoreConfig,
347
- At as injectTraceHeaders,
348
- ut as loadTelemetryConfigFromEnv,
349
- et as matchSamplingRule,
350
- rt as resolveSamplingRatio,
351
- P as resolveTelemetryConfig,
352
- Vt as shutdownTelemetry,
353
- wt as startTelemetry,
354
- Ot as updateTelemetryConfig
355
- };
@@ -1,8 +0,0 @@
1
- import { startTelemetry as a } from "./index";
2
- const o = async (t) => {
3
- const e = typeof t == "function" ? await t() : t;
4
- await a(e ?? {});
5
- };
6
- export {
7
- o as registerTelemetry
8
- };
package/dist/middleware DELETED
@@ -1,29 +0,0 @@
1
- import { NextRequest as w, NextResponse as i } from "next/server";
2
- import { c as g } from "./ignore-B1KXtl12.js";
3
- const h = {
4
- matcher: [
5
- "/((?!_next/static|_next/image|favicon.ico|robots.txt|sitemap.xml|.*\\.(?:css|js|mjs|cjs|png|jpg|jpeg|gif|svg|ico|webp|avif|woff|woff2|ttf|eot|map|txt|xml)).*)"
6
- ]
7
- }, l = (r, s = {}) => {
8
- const p = g(s.ignore), d = (s.requestStartHeader ?? "x-telemetry-start").toLowerCase(), n = (s.userTypeHeader ?? "x-telemetry-user-type").toLowerCase(), a = s.resolveUserType;
9
- return async (e, o) => {
10
- const f = e.nextUrl.pathname;
11
- if (p(f, e.method))
12
- return r(e, o);
13
- const t = new Headers(e.headers), c = (a == null ? void 0 : a(e)) || t.get(n);
14
- c && t.set(n, c), t.set(d, String(Date.now()));
15
- const x = new w(e, {
16
- headers: t
17
- }), m = await r(x, o);
18
- return m || i.next({
19
- request: {
20
- headers: t
21
- }
22
- });
23
- };
24
- }, T = (r = {}) => l(() => i.next(), r);
25
- export {
26
- T as createTelemetryMiddleware,
27
- h as defaultTelemetryMiddlewareConfig,
28
- l as withTelemetryMiddleware
29
- };
package/dist/next DELETED
@@ -1,29 +0,0 @@
1
- import { NextRequest as w, NextResponse as i } from "next/server";
2
- import { c as g } from "./ignore-B1KXtl12.js";
3
- const h = {
4
- matcher: [
5
- "/((?!_next/static|_next/image|favicon.ico|robots.txt|sitemap.xml|.*\\.(?:css|js|mjs|cjs|png|jpg|jpeg|gif|svg|ico|webp|avif|woff|woff2|ttf|eot|map|txt|xml)).*)"
6
- ]
7
- }, l = (r, s = {}) => {
8
- const p = g(s.ignore), d = (s.requestStartHeader ?? "x-telemetry-start").toLowerCase(), n = (s.userTypeHeader ?? "x-telemetry-user-type").toLowerCase(), a = s.resolveUserType;
9
- return async (e, o) => {
10
- const f = e.nextUrl.pathname;
11
- if (p(f, e.method))
12
- return r(e, o);
13
- const t = new Headers(e.headers), c = (a == null ? void 0 : a(e)) || t.get(n);
14
- c && t.set(n, c), t.set(d, String(Date.now()));
15
- const x = new w(e, {
16
- headers: t
17
- }), m = await r(x, o);
18
- return m || i.next({
19
- request: {
20
- headers: t
21
- }
22
- });
23
- };
24
- }, T = (r = {}) => l(() => i.next(), r);
25
- export {
26
- T as createTelemetryMiddleware,
27
- h as defaultTelemetryMiddlewareConfig,
28
- l as withTelemetryMiddleware
29
- };