@0xchain/telemetry 1.1.0-beta.18 → 1.1.0-beta.19

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.
@@ -1,8 +1,8 @@
1
- import { startTelemetry as a } from "./index.js";
2
- const o = async (t) => {
3
- const e = typeof t == "function" ? await t() : t;
4
- await a(e ?? {});
1
+ import { startTelemetry } from "./index.js";
2
+ const registerTelemetry = async (configOrProvider) => {
3
+ const resolvedConfig = typeof configOrProvider === "function" ? await configOrProvider() : configOrProvider;
4
+ await startTelemetry(resolvedConfig ?? {});
5
5
  };
6
6
  export {
7
- o as registerTelemetry
7
+ registerTelemetry
8
8
  };
@@ -1,29 +1,43 @@
1
- import { NextRequest as w, NextResponse as i } from "next/server";
2
- import { c as g } from "./ignore-CMi2r3b2.js";
3
- const h = {
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { c as createIgnoreMatcher } from "./ignore-BvHZTNsF.js";
3
+ const defaultTelemetryMiddlewareConfig = {
4
4
  matcher: [
5
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
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
- }
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
22
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;
23
34
  };
24
- }, T = (r = {}) => l(() => i.next(), r);
35
+ };
36
+ const createTelemetryMiddleware = (options = {}) => {
37
+ return withTelemetryMiddleware(() => NextResponse.next(), options);
38
+ };
25
39
  export {
26
- T as createTelemetryMiddleware,
27
- h as defaultTelemetryMiddlewareConfig,
28
- l as withTelemetryMiddleware
40
+ createTelemetryMiddleware,
41
+ defaultTelemetryMiddlewareConfig,
42
+ withTelemetryMiddleware
29
43
  };
package/dist/next.js CHANGED
@@ -1,29 +1,43 @@
1
- import { NextRequest as w, NextResponse as i } from "next/server";
2
- import { c as g } from "./ignore-CMi2r3b2.js";
3
- const h = {
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { c as createIgnoreMatcher } from "./ignore-BvHZTNsF.js";
3
+ const defaultTelemetryMiddlewareConfig = {
4
4
  matcher: [
5
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
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
- }
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
22
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;
23
34
  };
24
- }, T = (r = {}) => l(() => i.next(), r);
35
+ };
36
+ const createTelemetryMiddleware = (options = {}) => {
37
+ return withTelemetryMiddleware(() => NextResponse.next(), options);
38
+ };
25
39
  export {
26
- T as createTelemetryMiddleware,
27
- h as defaultTelemetryMiddlewareConfig,
28
- l as withTelemetryMiddleware
40
+ createTelemetryMiddleware,
41
+ defaultTelemetryMiddlewareConfig,
42
+ withTelemetryMiddleware
29
43
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xchain/telemetry",
3
- "version": "1.1.0-beta.18",
3
+ "version": "1.1.0-beta.19",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -35,18 +35,35 @@
35
35
  "dist",
36
36
  "!**/*.tsbuildinfo"
37
37
  ],
38
- "dependencies": {
38
+ "peerDependencies": {
39
39
  "@opentelemetry/api": "1.9.0",
40
- "@opentelemetry/instrumentation-http": "0.211.0",
41
- "@opentelemetry/exporter-trace-otlp-http": "0.211.0",
42
- "@opentelemetry/instrumentation-undici": "0.21.0",
43
- "@opentelemetry/otlp-exporter-base": "0.211.0",
44
- "@opentelemetry/resources": "2.5.0",
45
- "@opentelemetry/sdk-node": "0.211.0",
46
- "@opentelemetry/sdk-trace-base": "2.5.0",
47
- "@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",
48
48
  "next": "16.1.6"
49
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
+ },
50
67
  "publishConfig": {
51
68
  "access": "public"
52
69
  }
@@ -1,114 +0,0 @@
1
- const x = [
2
- // 健康检查 & 监控
3
- "/health",
4
- "/api/health",
5
- "/metrics",
6
- "/api/metrics",
7
- "/readyz",
8
- "/livez",
9
- "/monitoring",
10
- // Next.js 内部路由
11
- "/_next",
12
- "/__nextjs_",
13
- // Next.js App Router 元数据路由
14
- "/opengraph-image",
15
- "/twitter-image",
16
- "/icon",
17
- "/apple-icon",
18
- // Vercel 内部路由
19
- "/_vercel",
20
- // 静态资源 & SEO
21
- "/favicon.ico",
22
- "/robots.txt",
23
- "/sitemap.xml",
24
- "/manifest.json",
25
- "/manifest.webmanifest",
26
- "/.well-known",
27
- // 认证回调(NextAuth.js)
28
- "/api/auth"
29
- ], w = [
30
- // Next.js 内部服务端操作(非 HTTP 请求,由 Next.js OTel 自动产生)
31
- /^NextNodeServer\./,
32
- /^NextServer\./,
33
- /^BaseServer\./,
34
- /^AppRender\./,
35
- /^AppRouteRouteHandlers\./,
36
- // Next.js 中间件执行 span(如 "middleware GET /path")
37
- /^middleware /i,
38
- // Next.js 元数据解析
39
- /^resolveMetadata$/,
40
- /^generateMetadata$/
41
- ], f = [
42
- ".css",
43
- ".js",
44
- ".mjs",
45
- ".cjs",
46
- ".png",
47
- ".jpg",
48
- ".jpeg",
49
- ".gif",
50
- ".svg",
51
- ".ico",
52
- ".webp",
53
- ".avif",
54
- ".woff",
55
- ".woff2",
56
- ".ttf",
57
- ".eot",
58
- ".map",
59
- ".txt",
60
- ".xml"
61
- ], h = {
62
- paths: x,
63
- extensions: f,
64
- methods: ["HEAD", "OPTIONS"],
65
- spanNames: w
66
- }, C = (e) => e.map((s) => {
67
- const t = s.trim().toLowerCase();
68
- return t && (t.startsWith(".") ? t : `.${t}`);
69
- }), E = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), m = (e, s) => {
70
- if (e instanceof RegExp)
71
- return e.test(s);
72
- const t = e.trim();
73
- if (!t) return !1;
74
- if (t.includes("*")) {
75
- const o = `^${E(t).replace(/\\\*\\\*/g, ".*").replace(/\\\*/g, "[^/]*")}$`;
76
- return new RegExp(o).test(s);
77
- }
78
- return s === t ? !0 : t.endsWith("/") ? s.startsWith(t) : s.startsWith(`${t}/`) || s.startsWith(t);
79
- }, $ = (e, s) => {
80
- const t = s.toLowerCase();
81
- return e.some((n) => n && t.endsWith(n));
82
- }, j = (e) => {
83
- var o;
84
- if (!e) return "default";
85
- if ((o = e.paths) == null ? void 0 : o.some((a) => a instanceof RegExp)) return null;
86
- const t = (e.paths ?? []).map(String).sort().join(","), n = (e.extensions ?? []).map((a) => a.toLowerCase()).sort().join(","), p = (e.methods ?? []).map((a) => a.toUpperCase()).sort().join(",");
87
- return `p:${t}|e:${n}|m:${p}`;
88
- }, i = /* @__PURE__ */ new Map(), v = 16, N = (e) => {
89
- var t;
90
- const s = (t = e == null ? void 0 : e.spanNames) != null && t.length ? e.spanNames : h.spanNames;
91
- return (n) => !n || !s.length ? !1 : s.some((p) => m(p, n));
92
- }, R = (e) => {
93
- var a, l, c;
94
- const s = j(e);
95
- if (s) {
96
- const r = i.get(s);
97
- if (r) return r;
98
- }
99
- const t = (a = e == null ? void 0 : e.paths) != null && a.length ? e.paths : h.paths, n = (l = e == null ? void 0 : e.extensions) != null && l.length ? C(e.extensions) : h.extensions, p = (c = e == null ? void 0 : e.methods) != null && c.length ? e.methods.map((r) => r.toUpperCase()) : h.methods, o = (r, u) => u && p.includes(u.toUpperCase()) ? !0 : r ? $(n, r) ? !0 : t.some((d) => m(d, r)) : !1;
100
- if (s) {
101
- if (i.size >= v) {
102
- const r = i.keys().next().value;
103
- r && i.delete(r);
104
- }
105
- i.set(s, o);
106
- }
107
- return o;
108
- };
109
- export {
110
- N as a,
111
- R as c,
112
- h as d,
113
- m
114
- };